В настоящее время я пишу программу python, которая должна обнаруживать другие экземпляры себя в локальной сети. Он использует UDP-трансляции для обнаружения (255.255.255.255
).Отправка широковещательной рассылки во все сети
Проблема в том, что если компьютер имеет несколько сетевых адаптеров (подключен к нескольким сетям), то только одна из этих сетей получит широковещательную передачу. Моя первоначальная идея состояла в том, чтобы перечислить все сетевые адреса, назначенные локальным сетям, и отправить широковещательный пакет для каждого из них (например, 192.168.0.255
и 192.168.1.255
). Тем не менее, похоже, нет надежного способа обнаружить все локальные сетевые адреса, как все, что я нашел, и попытался либо полагаться на библиотеку python-2, либо возвращает только 127.0.1.1
на моей виртуальной машине Linux (у которой есть 192.168.0.100
и некоторые другие).
Как я могу транслировать все доступные сети в этом случае?
Я использую Python 3 и ищу платформенно-независимый способ сделать это и без больших сторонних библиотек. Библиотека, которая correctly
отображает все сетевые интерфейсы, выполнит эту работу.
Извините, я не знаю ни одной библиотеки Python, которая сделает это за вас. Для чего стоит: в Windows вы можете проанализировать outout 'ipconfig/all', в Linux посмотреть' ip addr' и 'ip link'. –
Худший совет, который вы можете дать. Есть модули, предназначенные для работы. Всегда избегайте запуска внешних команд - это плохая практика. –
Если вы отправляете пакет UDP на '255.255.255.255', его следует отправлять по всем сетевым интерфейсам по умолчанию, хотя, предположительно, [некоторые проблемы] (http://serverfault.com/questions/72112/how-to-alter -the-global-broadcast-address-255-255-255-255-behavior-on-windows) с реализацией в Windows. – Aya