C# 发送UDP数据包,不使用ARP,已知IP和MAC

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发送的数据包中知

我试图通过网络向微控制器发送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了。。还有什么我没有考虑的吗

工作的广播方法如下所示:

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堆栈,构建并发送您自己的原始数据包


内置的网络类对发送到不符合要求的目标根本不友好。您好,非常感谢Joachim,使用arp命令停止了以太网上的arp请求:)。。。现在我只是有一个问题,IP头有一个错误的校验和。。。其0x0000,但应为0x4e19,不确定是否与此相关