Я пытаюсь отправить запрос ICMP AddressMask на мой маршрутизатор в C #.Тем не менее, мой сокет всегда тайм-аут или, если тайм-аут не установлен, цикл приложения бесконечно.Вот код:
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);
Я знаю, что многие типы маршрутизаторов не отвечают на запрос маски адреса, но я пытался даже с простым эхо-запросом, и результат был таким же.