2012-08-07 59 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