Windows XP或更高版本的解决方案。最好是C#或C ++。
我们不想使用子网定向广播(例如192.168.101.255)进行广播,因为我们尝试联系的设备没有响应。相反,我们希望能够仅从特定的NIC / IPAddress发送目标为255.255.255.255的UDP数据报,这样就不会在其他NIC上发送广播。
这意味着我们必须绕过IP堆栈,这就是问题所在。我们如何规避Windows上的IP堆栈以仅从特定的NIC / MAC地址发送符合UDP / IP的数据报?
答案 0 :(得分:2)
将套接字绑定到所需的接口而不是使用INADDR_ANY?
// Make a UDP socket
SOCKET s = socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);
// Bind it to a particular interface
sockaddr_in name={0};
name.sin_family = AF_INET;
name.sin_addr.s_addr = inet_addr("192.168.101.3"); // whatever the ip address of the NIC is.
name.sin_port = htons(PORT);
bind(s,(sockaddr*)name);
答案 1 :(得分:2)
为了使用WinPcap在C#中发送原始数据包,您可以使用Pcap.Net。 它是用C ++ / CLI和C#编写的WinPcap的包装器,包括一个包解释和创建框架。
答案 2 :(得分:1)
我没试过这个,但我知道WinPCap允许你做一个原始的send。由于它工作在相当低的水平,它可能允许您在堆栈上发送足够低的频率以绕过完整的广播。那里有各种C#包装器,当然你可以使用那里提供的普通C / C ++代码。我认为诀窍可能是绑定到你要发送的正确的适配器,它可能会起作用。
答案 3 :(得分:0)
The broadcast address 255.255.255.255 is too general.您必须分别为每个网络接口制作不同的广播地址。