Symptoms: Windows machine with two network interfaces (NIC), 10.x.x.x and 192.168.x.x. I send a UDP broadcast message (to destination address 255.255.255.255), and see the same message go out on both networks. The problem is, the source address that goes out with each packet is the IP address for my first network interface, so it’s sending an unreachable address out my second network. Responding devices start doing ARP requests to try (in vain) to find that unreachable address instead of responding. (Watch it with WireShark.)
10.x.x.x (subnet 255.0.0.0) => 10.255.255.255 192.168.1.x (subnet 255.255.255.0) => 192.168.1.255
The broadcast address 255.255.255.255 is also known as INADDR_BROADCAST or ‘
You only need one socket, which you can bind to all interfaces.
Enumerating your network interfaces requires some work: find it under Win32_NetworkAdapterConfiguration, fields IPAddress and IPSubnet. Those fields are arrays: you want element zero.
import wmi nicsList = wmi.WMI().Win32_NetworkAdapterConfiguration() # your network adapters
If you’re getting WinSock error 10013, you need to set SO_BROADCAST.
Hope that starts you down the right path.
Also, if your devices aren’t configured for the same subnet, crafting a sub-net-specific broadcast message means you’re not going to find them. For example, if you have a 10.x.x.x device off your 192.168.x.x interface, it’s going to ignore your 192.168.255.255 broadcast. You’ll have to fall back to disabling a network interface and using 255.255.255.255 to get to it.