Широковещательная передача Windows/Python UDP заблокирована без брандмауэра

ОС: Виндовс 10

Я использую коммутатор Ethernet для одновременной отправки пакетов UDP в две другие системы (подключенные непосредственно к тому же коммутатору) через Python 3.4.4. Тот же код работает на двух других ПК для разработки/тестирования, поэтому я знаю, что это не код Python, но по какой-то причине он не работает на ПК, на котором я хочу использовать систему.

Когда я использую Wireshark для просмотра трафика UDP по адресу 169.254.255.255 (целевой IP-адрес для отправки пакетов UDP), ничего не появляется. Однако отправка пакетов на 169.X.X.1 работает. С другой стороны, пакеты, отправленные на 169.X.X.255, отправляются, но в ответ я получаю сообщения о превышении времени жизни. Я ограничен этим целевым IP-адресом, поэтому изменение IP-адреса не является решением. У меня также есть отправка через порт 6000 (произвольно), я пытался изменить номер порта но безрезультатно. Также не дает отправить на 169.254.255.1

У меня отключены брандмауэры.

Спасибо за вашу помощь.


person Geoff    schedule 18.04.2017    source источник
comment
Стоит ли делиться здесь используемыми IP-адресами?   -  person David    schedule 18.04.2017
comment
Это изолированная сеть, но я немного изменил детали. Спасибо за беспокойство.   -  person Geoff    schedule 18.04.2017


Ответы (2)


та же проблема здесь, решение - привязать сокет к адаптеру, который отправляет многоадресную рассылку

пример:

msg = \
    'M-SEARCH * HTTP/1.1\r\n' \
    'HOST:239.255.255.250:1900\r\n' \
    'ST:upnp:rootdevice\r\n' \
    'MX:2\r\n' \
    'MAN:"ssdp:discover"\r\n' \
    'USER-AGENT:Python\r\n\r\n'

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL, 2)
s.bind(('ip of interface',1901))
s.settimeout(10)
print msg,len(msg)
print s.sendto(msg, ('239.255.255.250', 1900) )
resp, (addr, port) = s.recvfrom(1024)
print resp
s.close()

решение из этого поста Не удается отправить многоадресную рассылку через сетевой адаптер, отличный от стандартного

person Michal Kavan    schedule 26.04.2017
comment
Вы путаете многоадресную рассылку и широковещательную рассылку, но ваш совет верен и объясняет, почему он работает на некоторых компьютерах, но не работает на других (это зависит от того, правильный ли адаптер по умолчанию). Также работает, когда он указывает полный адрес, потому что тогда это уже не широковещательная рассылка и привязка ко всем адресам. - person infinitenothing; 22.08.2017

Странная вещь в моей проблеме заключалась в том, что этот точный код работал на рассматриваемом компьютере (и двух компьютерах для разработки) ранее, но не работал в то время, когда я разместил этот вопрос.

Wireshark не привел меня к моему ответу (только показал мне, что пакеты UDP не были отправлены), поэтому я решил пропинговать IP-адрес через командную строку. Я получил одну из двух ошибок (целевой хост недоступен или время запроса истекло). Эти ошибки привели меня к добавлению желаемого целевого IP-адреса (169.254.255.255) в кеш ARP, что решило мою проблему.

Я хотел бы поблагодарить вас за предложение возможного решения.

person Geoff    schedule 28.04.2017