質問:
ケーブル障害検出ソフトウェアのセクションをテストしていますが、cat5 ケーブルでケーブル障害を確実かつ再現可能に生成したいと考えています。
現在、私は 1 メートルの長さのねじれていないケーブルを使用しており、電源の横でケーブルを手動でくねらせていますが、アプリケーションの障害を検出できません (イーサネット ASIC からイーサネット障害カウンターを読み取っています)。これは、エラーが発生していないためか、ソフトウェア/ハードウェアの検出に問題があるためか、わかりません。
ソフトウェアでこれを行う方法はありますか?
Java や Python などの高水準言語で何かを書くことに落ち着いて、最後の手段として C でまとめることもできますが、純粋に問題を修正するためにイーサネット ドライバを書き直すことは避けたいと思っています。可能なバグ。
[編集]:ケーブル障害を作成したい- それらを検出しません。
[編集]: FTP と SCP を介して大きなファイルを転送しましたが、改ざんされたケーブルに問題はありませんでした。wireshark でトラフィックを検査している間、エラーは発生しませんでした。
[編集]: pythonの同様の質問も参照してください。
解決:
さて、C との戦いに 1 日以上費やした後、これが Python のソリューションです。
まず、イーサネット カードの自動チェックサムを無効にします。
sudo ethtool -K eth1 tx off
次に、危険なフレームを python から送信します。
#!/usr/bin/env python
from socket import *
#
# Ethernet Frame:
# [
# [ Destination address, 6 bytes ]
# [ Source address, 6 bytes ]
# [ Ethertype, 2 bytes ]
# [ Payload, 40 to 1500 bytes ]
# [ 32 bit CRC chcksum, 4 bytes ]
# ]
#
s = socket(AF_PACKET, SOCK_RAW)
s.bind(("eth1", 0))
src_addr = "\x01\x02\x03\x04\x05\x06"
dst_addr = "\x01\x02\x03\x04\x05\x06"
payload = ("["*30)+"PAYLOAD"+("]"*30)
checksum = "\x00\x00\x00\x00"
ethertype = "\x08\x01"
s.send(dst_addr+src_addr+ethertype+payload+checksum)
複雑にならないと誰が言った...
PS: Python が大好きです。