2014-02-13 420 views
2

我正在尋找一種簡單的方法將MAC地址轉換爲本地網絡中相應的IP地址。在我的情況下,只有兩個設備:一個非常普通的PC(192.168.0.1)和一個在其ROM中具有任意IP地址(192.168.0.xxx)的科學儀器。 PC和儀器通過UDP插座直接連接到CAT5電纜。如何將MAC地址轉換爲相應的IP地址?

我知道儀器的MAC地址,但是請假定它的IP地址是未知的。我想寫一個C/C++應用程序,它使用套接字連接與儀器對話。但是我需要在打開套接字之前知道IP地址(Windows上的WinSock,OS X和Linux上的sys /套接字)。

目前我使用非常骯髒的方式,如下所示。

  1. 執行ping命令ping 192.168.0.2(注:儀表不響應ping)從192.168.0.2
  2. 重複這192.168.0.255
  3. 執行arp -a打印IP列表和MAC地址
  4. 找到已知的MAC地址和相應的IP地址從列表中

我想知道如何檢索IP地址在一個更復雜的冰封的方式。如果我可以在Mac,Linux和Windows機器上使用相同的方法,那將會非常好。

據我所知,我必須向網絡廣播一個ARP數據包,以便從一個已知的IP地址中檢索一個MAC地址。但是我找不到從MAC地址獲取IP地址的方法。

+2

這就是所謂的RARP - 反向ARP。 https://en.wikipedia.org/wiki/Reverse_Address_Resolution_Protocol –

+2

@VioletGiraffe這只是一個提供DHCP功能的過時變體 - 它不會幫助操作。一個基本上必須做OP已經做了什麼,ping整個範圍並且搜尋ARP緩存 - 除非儀器提供學習它的IP地址的具體方式。 – nos

+0

@nos:DHCP與它有什麼關係? RARP正是OP所要求的。 –

回答

2

沒有好的通用解決方案,因爲它與預期行爲相反。低層協議不需要知道高層協議,因此MAC層的操作沒有任何有關IP地址的好方法。然後你就會陷入現在的狀況。因此,您可以使用已有的代碼進行破解,也可以從不同的方向進行處理。是否有任何非代碼的方式來事先確定設備的IP地址?如顯式設置或將其放入應用程序的配置文件中。或者,您是否可以讓設備發送虛假的ARP請求? PC應該根據傳入的請求以及它對請求的響應更新其ARP緩存。

+0

謝謝克里斯。你的答案是我期望的不幸:-)我上面提到的儀器是一個定製的電路,它上面有一個FPGA。由於FPGA由於某些原因隨機生成IP地址,我所知道的僅僅是MAC地址。實際上,我(將)擁有數百個這種設備。所以我想避免重複我的骯髒的黑客數百次。我會詢問FPGA代碼的開發者關於發送ARP請求的可能性。 –

+1

幾年前,我一直在處理類似的問題。我們的設備具有用戶分配的地址,可以在網絡上來去。我們所做的就是讓每個設備在特定的UDP端口上偵聽特定的字符串。如果它收到該字符串,它會用一個標識符進行響應。這樣我們就可以將UDP數據包發送到每個地址,然後只是被動地收集響應以查看哪些設備是活的。如果你有一堆這些東西,這可能是一個選擇。 –

0

如何嘗試中的系統命令arpC++

system("arp"); 

這給你一個IP-MAC轉換表。

+0

是的,但是他必須首先填充該表,這是他列出的代碼正在嘗試執行的操作。 –

+0

@xb。換句話說,我想知道如何填充ARP緩存而不重複ping或類似的命令。 –

+0

@AkiraOkumura'arp'給我一個當前連接的機器的IP-MAC表,而不執行任何'ping'命令。我正在運行一個Linux。 –

1

我們不得不這樣做了,但我認爲我們沒有正常工作。

我沒有API調用,但它們很容易在Windows API中找到。這就是我們所用的,所以我們的解決方案不能移植到非Windows系統。

在我們的案例中,我們遇到了同樣的障礙 - 不容易翻譯。我們最終要做的是獲得所有可用NIC的列表,然後遍歷每個NIC,試圖將我們給定的MAC地址與從NIC結構獲得的MAC地址相匹配。

一旦我們找到了匹配,我們查找了給NIC結構的IP地址。

我們一直在看看我們是否發現任何其他匹配以記錄錯誤。這是我們所做的一件好事,因爲我相信我們多次發現它,並且不是由於MAC地址被克隆。

那時我們才知道這將是一個更難的問題,我們決定放棄整個事情並堅持只使用IP地址。