Консольное приложение C# не отправляет многоадресный пакет UDP на Windows Server 2003
Кажется, я не могу заставить мое маленькое тестовое приложение отправлять многоадресный пакет UDP на определенную машину под управлением Windows Server 2003. У меня настроена отправка пакета в общедоступный DNS Google, а другой - на номер 239.192.250.250. Работает нормально без каких-либо ошибок. Но в выводе Wireshark отображается только пакет Google. Есть идеи?
static void Main(string[] args)
{
var socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
var data = ASCIIEncoding.UTF8.GetBytes("hello world");
socket.SendTo(data, new IPEndPoint(IPAddress.Parse("8.8.8.8"), 80));
socket.SendTo(data, new IPEndPoint(IPAddress.Parse("239.192.250.250"), 80));
Console.ReadKey();
}
А вот и вывод Wireshark:
No. Time Source Destination Protocol Length Info
205 1.83925300 ********** 8.8.8.8 UDP 53 Source port: 62432 Destination port: http
На любой другой машине, которую я тестировал, включая сервер Windows 2008 R2, я получаю что-то такое:
No. Time Source Destination Protocol Length Info
58 4.52926800 ********** 8.8.8.8 UDP 53 Source port: 56530 Destination port: http
60 4.52940400 ********** 239.192.250.250 UDP 53 Source port: 56530 Destination port: http
1 ответ
Если вы находитесь на сетевом коммутаторе, они только направляют пакет к соединению конечного компьютера. В то время как некоммутируемый концентратор транслирует пакеты на все порты.
Wireshark выполняет анализ пакетов, поэтому он не может видеть все пакеты на коммутируемом маршрутизаторе.
Вот выдержка из Switch Reference @ Wireshark:
Как отмечено в FAQ по Wireshark, захват в коммутируемой сетевой среде может оказаться сложной задачей. Отдельный порт коммутатора будет принимать широковещательный, многоадресный и одноадресный трафик, предназначенный для этого конкретного порта. В большинстве случаев он не будет получать одноадресный трафик для других портов, что вы, вероятно, пытаетесь захватить.