2012-08-07 58 views
1

我想通过网络发送UDP给微控制器。微控制器几乎将所有的IP堆栈都剥离出来,以保持其精简,因此无法参与ARP。 微控制器正在输出广播数据包,我可以收到,所以我知道它的IP地址和MAC地址。 我可以向它发送广播UDP数据包,但它收到罚款,但当我尝试使用其IP地址发送数据包时,我可以在wireshark中看到ARP消息,“谁有192.168.1.205?告诉192.168.1.18”,205是微,18是我的电脑。微不响应它的MAC地址,所以我无法发送数据包,但我知道微型发出的数据包的MAC地址。发送UDP数据包,不使用ARP,已知的IP和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地址ess ..我的应用程序知道和需要使用(我认为)。我也希望网络上的一些ARP表能够知道MAC地址在哪里看到,因为这些信息正在从它发送的数据包中。

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

由于提前, 加雷思

+0

内置的网络类别不会友好地发送到不符合标准的目标。 – 2012-08-07 12:54:42

回答

1

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

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

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

+0

嗨,非常感谢Joachim,使用arp命令停止了通过以太网的ARP请求:)...现在我只是遇到了IP头有一个错误校验和的问题......它的0x0000,但应该是0x4e19,不确定是否这可能是相关的 – 0lOl0 2012-08-07 14:12:34

+0

http://stackoverflow.com/questions/4182815/how-to-fix-tcpclient-ip-header-bad-checksum – 0lOl0 2012-08-07 15:24:26