簡體   English   中英

在Linux上使用C ++解析IP地址的MAC地址

[英]Resolving MAC address for IP address using C++ on Linux

我需要生成一個包含目標MAC地址的以太網頭,(因為libnfnetlink在預先路由發生之前只給出了IP頭),外出接口號也是已知的,因此可以在正確的網絡中進行查找。

從IP地址解析MAC地址的庫/功能是什么?

目前還不清楚為什么需要MAC地址,因為這通常是在較低級別為您處理的。

但是,假設您的目標位於本地以太網段上,則可以使用arp命令在本地緩存中查找值。 如果沒有緩存該值......那么,這是一個問題。 也許arping會有所幫助......

(通常你會發送一個數據包,例如,IP地址10.10.10.10,你的系統會發送一個ARP數據包,查詢誰有10.10.10.10,並且響應將從該目標系統返回其MAC地址然后它會被緩存。(您可以通過tcpdump觀察這種情況。)或者當系統上線時,它會發出一條廣播消息,通知其他人的MAC地址。當然,如果您的目的地在另一個以太網段上,您將路由到網關而不是直接到目的地,並且沒有可用的目標MAC地址。)

您可以進一步閱讀:

顯然,您只能找到直接連接的IP地址的MAC地址,但是沒有與平台無關的方法。 在Linux上,您可以在向目標發送內容后查看/proc/net/arp以觸​​發內核發送ARP。

編輯添加你也可以使用SIOCGARP ioctl()雖然它只是在ARP緩存中查找,所以如果沒有ARP,它將不會發送ARP。

否則,您將不得不制作自己的ARP請求數據包。 如果你走這條路,你可能會重復使用來自arping的一堆代碼。

您通常無法從IP地址獲取MAC地址,事實上,由於IP可以在除以太網之外的數據鏈路協議上運行,因此某些IP地址沒有相應的MAC地址。

MAC地址僅可用,並且僅在相同的以太網段上相關。 在該段上,可以通過ARP請求檢索它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM