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

时间:2012-08-07 12:48:54

标签: c# udp ip ethernet osi

我正在尝试通过网络将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地址所看到的位置,因为正在从中发送带有此信息的数据包。

作为一个注释,我希望将广播保持在最低限度,以减少网络上其他微控制器的负载。

提前致谢, 加雷

1 个答案:

答案 0 :(得分:1)

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

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

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