2015-02-10 76 views
2

對於ICMP ping請求(迴應請求),我需要獲取目的地的MAC地址嗎?我正在嘗試學習如何使用原始套接字在C中實現此功能,但無法理解如何獲取目標的MAC地址。發送ICMP ping

任何幫助表示讚賞。 謝謝。

+1

建議:獲取'coreutils'的源代碼並查看'ping'。 https://www.gnu.org/software/coreutils/ – HuStmpHrrr 2015-02-10 18:26:53

+1

@HuStmpHrrr:'ping'不在[coreutils]中(http://en.wikipedia.org/wiki/GNU_Core_Utilities)。 – indiv 2015-02-10 19:09:27

回答

3

[...]我需要獲取目的地的MAC地址嗎?

不,你不應該在大多數情況下。

raw(7)(我的重點)的手冊頁:

原始套接字允許在用戶空間中實現新的IPv4協議。原始套接字接收或發送不包括鏈路級別報頭的原始數據報

這只是合乎邏輯的,因爲你可能是ping-某些東西不在同一個子網上,在這種情況下,MAC地址就是路由器的MAC地址。

爲了證明這一點,here的一些源代碼爲舊的BSD版本ping - 我在Google上發現的第一個。請注意,它不會嘗試查找目標MAC地址。

請注意,一些UNIX ping程序會做各種有趣的事情。例如,某些版本允許您欺騙傳出的源IP。某些版本包括arping功能。在這些情況下,他們將注入較低級別的東西(在鏈接級別),在這種情況下,您將需要原始頭文件。

+0

我需要獲取本例中目的路由器的MAC地址(下一跳)。 – Novak007 2015-02-10 18:44:20

+0

@ Novak007,除非使用原始套接字,否則不應使用原始以太網數據包。如果您使用原始套接字,那麼操作系統將爲您解決這個問題。 – abligh 2015-02-10 18:45:09

+0

答案表明ARP將處理目標MAC地址。如果您使用的是原始套接字,並且操作系統將爲您使用已解析的地址目標MAC地址 – cmidi 2015-02-10 19:01:42