2

我正在尝试通过网络将 UDP 发送到微控制器。微控制器已经剥离了几乎所有的 IP 堆栈以保持精简,因此无法参与 ARP。微控制器正在输出广播数据包,我可以接收到它,所以我知道它的 IP 地址和 MAC 地址。我可以向它发送广播UDP数据包,它接收良好,但是当我尝试使用它的IP地址发送数据包时,我可以在wireshark中看到ARP消息,“谁有192.168.1.205?告诉192.168.1.18”,205是微,18是我的电脑。微不响应其 MAC 地址,所以我无法发送数据包,但我知道微发送的数据包中的 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 地址在哪里看到,因为带有此信息的数据包正在从它发送..

作为说明,我想将广播保持在最低限度,以减少网络上其他微控制器的负载。

在此先感谢,加雷斯

4

1 回答 1

1

据我所知,你有两个选择,我相信其他人有更多;

  • 在启动应用程序之前在操作系统中设置静态 ARP 条目。arp -s <ip> <mac>或类似的将在大多数操作系统上设置它并绕过 ARP 以进一步请求 IP。

  • 使用 Jpcap 完全绕过 IP 堆栈,构建和发送您自己的原始数据包。

于 2012-08-07T13:02:53.887 回答