2012-01-14 8 views
2

私はC#でルータにICMPアドレスマスク要求を送信しようとしています。しかし、私のソケットは常にタイムアウトします。タイムアウトが設定されていなければ、アプリケーションのループは無限になります。ここで コードです:ICMPソケットは常にタイムアウトします

Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.Icmp); 
socket.Bind(new IPEndPoint(interfaceAddress, 0)); 

Random rnd = new Random(); 
UInt16 seed, sn; 

seed = (UInt16)rnd.Next(); 
sn = (UInt16)rnd.Next(); 

var icmpAddressMaskRequest = new Byte[12]; 

icmpAddressMaskRequest[0] = 17; 
icmpAddressMaskRequest[4] = (Byte)(seed >> 8); 
icmpAddressMaskRequest[5] = (Byte)(seed & 0xff); 
icmpAddressMaskRequest[6] = (Byte)(sn >> 8); 
icmpAddressMaskRequest[7] = (Byte)(sn & 0xff); 

UInt16 checksum = 0; 
for (int i = 0; i < 6; i++) 
{ 
    Int32 twoOctects = icmpAddressMaskRequest[2 * i] * 256 + icmpAddressMaskRequest[2 * i + 1]; 
    Int32 tempChecksum = checksum + twoOctects; 

    if (tempChecksum > UInt16.MaxValue) 
     checksum = (UInt16)((tempChecksum & 0xffff) + 1); 
    else 
     checksum = (UInt16)tempChecksum; 
} 

icmpAddressMaskRequest[2] = (Byte)(255 - checksum >> 8); 
icmpAddressMaskRequest[3] = (Byte)(255 - checksum & 0xff); 

EndPoint remoteEndPoint = new IPEndPoint(IPAddress.Parse("192.168.100.1"), 0); 

socket.ReceiveTimeout = 2000; 
socket.SendTo(icmpAddressMaskRequest, remoteEndPoint); 

var buffer = new Byte[4096]; 
socket.ReceiveFrom(buffer, ref remoteEndPoint); 

私はルータの多くの種類がアドレスマスク要求に応答しないことを知っているが、私は、単純なエコー要求と結果は同じであってもしてみました。

答えて

2

あなたは、これはあなたが応答が実際に送信されているかどうか(そして、あなたのリクエストが送信されているかどうか)を参照することができます、Wiresharkをダウンロードして起動する必要があります。 pingが応答しないという事実に関して

は、他の誰かがthe same problemを持っていました。

このコードでは、C#がビット演算を処理する方法に問題がある可能性があります。Byteは常に署名され、多くの場合予期しないあらゆる結果を引き起こすintにアップグレードされるため注意が必要です。

+0

答えをありがとう。私はWiresharkをダウンロードし、ICMPパケットをフィルタリングしました。 Wiresharkは私のパケットを正しく認識しますが、チェックサムが正しくないことを指摘します。実際、私は単純な和を実装していますが、標準では「1の補数」の和を使用する必要があると述べています。私はそれに取り組んでいます...ところで、バイトはunsignedです。 – Totem

+0

192.168.100.1からの応答は、チェックサムが正しくないのにwiresharkによって受信されたが、私のソケットでは受信されなかったことに言及していません! – Totem

+0

気にしないで、実際にはチェックサムでした!ありがとう! – Totem

関連する問題