C# 发送UDP数据包,不使用ARP,已知IP和MAC
我试图通过网络向微控制器发送UDP。微控制器几乎剥离了所有IP堆栈以保持精简,因此无法进行ARP。 微控制器正在输出广播数据包,我可以接收这些数据包,以便知道其IP地址和MAC地址。 我可以向它发送广播UDP数据包,它接收得很好,但当我尝试使用其IP地址发送数据包时,我可以在wireshark中看到ARP消息,“谁拥有192.168.1.205?告诉192.168.1.18”,205是micro,18是我的PC。micro不响应其MAC地址,因此我无法发送数据包,但我从micro发送的数据包中知道MAC地址 所以我的问题是我可以使用UdpClient指定IP和MAC地址,这样它就不需要使用ARP了。。还有什么我没有考虑的吗 工作的广播方法如下所示:C# 发送UDP数据包,不使用ARP,已知IP和MAC,c#,udp,ip,ethernet,osi,C#,Udp,Ip,Ethernet,Osi,我试图通过网络向微控制器发送UDP。微控制器几乎剥离了所有IP堆栈以保持精简,因此无法进行ARP。 微控制器正在输出广播数据包,我可以接收这些数据包,以便知道其IP地址和MAC地址。 我可以向它发送广播UDP数据包,它接收得很好,但当我尝试使用其IP地址发送数据包时,我可以在wireshark中看到ARP消息,“谁拥有192.168.1.205?告诉192.168.1.18”,205是micro,18是我的PC。micro不响应其MAC地址,因此我无法发送数据包,但我从micro发送的数据包中知
myUdpClient.EnableBroadcast = true;
myUdpClient.Connect(IPAddress.Broadcast, port);
myUdpClient.Send(dataBytes, dataBytes.Length);
当前不起作用的固定IP方法如下所示
IPEndPoint ep = new IPEndPoint("192.168.1.205", port);
myUdpClient.Send(dataBytes, dataBytes.Length, ep);
我已经考虑过使用类似于
myUdpClient.Client.SendTo(dataBytes, SocketFlags.DontRoute, ep);
但是这不起作用,仍然没有利用微控制器的MAC地址。。我的应用程序知道并需要使用(我认为)。我还希望网络上的某个ARP表能够知道MAC地址的位置,因为带有此信息的数据包正在从MAC地址发送
请注意,我希望将广播保持在最低限度,以减少网络上其他微控制器的负载
提前感谢,,
就我所知,你有两个选择,我相信其他人会有更多选择
- 在启动应用程序之前,在操作系统中设置静态ARP项arp-s或类似功能将在大多数操作系统上设置arp,并在进一步请求IP时绕过arp
- 使用Jpcap完全绕过IP堆栈,构建并发送您自己的原始数据包