我正在編寫一個用C++編寫的將在Linux上運行的發現程序,以便確定某些設備是否連接到網絡。我有其他設備的Mac地址,我需要解析他們的IP地址。編程地使用Mac地址解析Ip地址
我檢查了/ proc/net/arp並且設備沒有出現。 我嘗試ping廣播地址,這沒有達到目標,因此ARP緩存不更新。但是,如果我直接ping IP地址它是(但這不是一個選項)。
另外,這些設備可以配置爲靜態ips,也可以通過dhcp獲取。
有沒有什麼辦法可以確定給定Mac地址的IP地址?
我正在編寫一個用C++編寫的將在Linux上運行的發現程序,以便確定某些設備是否連接到網絡。我有其他設備的Mac地址,我需要解析他們的IP地址。編程地使用Mac地址解析Ip地址
我檢查了/ proc/net/arp並且設備沒有出現。 我嘗試ping廣播地址,這沒有達到目標,因此ARP緩存不更新。但是,如果我直接ping IP地址它是(但這不是一個選項)。
另外,這些設備可以配置爲靜態ips,也可以通過dhcp獲取。
有沒有什麼辦法可以確定給定Mac地址的IP地址?
幾年前,我會建議使用RARP,但Linux內核不再支持它。除非已有解決方案,否則我建議您採用以下自制解決方案:
- 您可以使用Packet套接字來實現您自己的第2層協議:使用IP作爲以太網幀的有效載荷,您可以選擇自己的協議代碼(例如:代替0x 0x800用於IP使用0xABAB,始終是大於1536的數字)
- 在每個節點中,您實現一個簡單的服務器,使用數據包套接字來讀取使用該協議代碼的幀,或者可以使用pcap,如你所願。
- 無論何時您需要另一個節點的IP地址,都會將以太網幀發送到該MAC地址。服務器將讀取新的幀並用另一幀傳送自己的IP地址進行響應。
- 如果你選擇了這個解決方案,請記住有效載荷必須是至少46個字節長,所以你可能需要使用填充。您也可以使用您自己的協議的TLV(類型長度值)格式。
閱讀本:
http://en.wikipedia.org/wiki/Ethernet_frame
http://man7.org/linux/man-pages/man7/packet.7.html
我希望這有助於。