2009-05-27 48 views
4

我正在開發一個Wake on LAN服務,它將從一個網站運行,並且應該與許多不同的平臺進行交互 - 因此,沒有Windows的解決方案。當用戶在網站上註冊他們的系統時,我需要獲取用於構建"magic" packet的MAC地址。我有一個Java Applet能夠爲我做到這一點,並知道一個可以工作的ActiveX控件,但我想知道是否有辦法通過查詢路由器/交換機來做到這一點在服務器端。由於系統可能位於許多不同的物理子網上,因此使用ARP將無法工作 - 除非有辦法配置路由器以我的名義執行ARP。當我只知道它是IP地址時,如何獲得遠程系統的MAC地址?

任何知道任何網絡API,專有或其他,可用於查找MAC地址給定一個IP地址?我認爲我們正在使用思科路由器,但這是一個複雜的網絡,可能有多個供應商參與各個層面。我想在獲得網絡神的犧牲之前獲得一些可能的解決方案的背景信息。如果技術上不可行,那就毫無意義。 :-)

編輯:我們的網絡基礎設施設置爲允許定向廣播,雖然找出確切的廣播地址,因爲網絡掩碼並不總是/ 24是我需要解決的另一個難題。

+0

嗯......如果你和你想喚醒的機器不在同一個網段,你將無法使用WoL,不是嗎? – hop 2009-05-27 19:48:43

+0

他說他已經指示廣播作爲對我的回答的評論。 – 2009-05-27 20:19:47

+0

如果您可以查詢您的DHCP服務器中的IP地址數據庫,您還應該能夠獲取每個網段的網絡和廣播地址。假設SNMP已啓用,您也可以從路由器查詢此信息。 – 2009-05-28 13:39:53

回答

1

目前該應用程序正在使用Java 6小程序,該程序允許我從遠程系統中提取主機名和MAC地址。我不喜歡在Java 6上有這種依賴性,但Snow Leopard和Windows都支持它,所以我可能會忍受它。

在相關方面,我們的網絡人員向我尋求幫助,將一些現有代碼轉換爲ASP.NET。在對話期間,我問他們是否有活MAC地址信息(因爲他們基於可疑的網絡活動 - 病毒/蠕蟲進行端口關閉)。事實證明他們這樣做,我們可能能夠利用這個項目來訪問網絡數據庫中的信息。

4

如果您位於使用DHCP的本地網絡上,則可以查看服務器數據庫以獲取具有該地址的最後一位用戶的MAC。將來,您可以通過網絡查看ARP請求並將響應緩存在某種表格中。您也可以考慮使用RMON或SNMP來嘗試查詢交換機和路由器上的地址表。

需要注意的是,要在路由器上使用WoL,您需要啓用定向廣播,或者您需要在本地網段中有一箇中繼服務器。

已經有一段時間我打的路由器和swtiches但這可能是使用SNMP http://www.cisco.com/en/US/tech/tk648/tk362/technologies_tech_note09186a00801c9199.shtml

+0

定向廣播事物已經被照顧。我們有一個基於SCCM的系統,可以管理Windows系統,並且可以讓管理員執行此操作,但我正在努力讓用戶在多平臺世界中喚醒自己的系統以支持遠程桌面/遠程登錄。 – tvanfosson 2009-05-27 19:30:08

+0

你使用什麼DHCP服務器? – 2009-05-27 19:38:29

+1

您也可以向用戶提供有關如何獲取其MAC地址並使用包含服務 – 2009-05-27 19:39:32

0

我不認爲有什麼辦法可以做到這一點什麼來查詢的起點。當IP數據包通過第一臺路由器時,主機的MAC信息將丟失(因爲您知道MAC僅用於以太網層)。如果距離PC最近的路由器能夠告訴遠程MAC代碼給你,它將只能看到PC和「另一端」之間的下一個路由器的MAC。

0

開始犧牲。

除非您沒有涉及路由器,否則沒有一般的方法可以在網絡方面做到這一點。在涉及路由器的情況下,您永遠不會看到始發系統的MAC地址。

這假設始發系統只有一個網絡接口,所以只有一個MAC地址。

事實上,你甚至可以確定你的「神奇數據包」(無論是什麼)將通過路由器到達你想要達到的系統嗎?這聽起來像路由器或其他網絡基礎設施應該執行的功能。

0

MAC地址是僅用於網絡段,並在每一跳都將丟失。只有IP被保留用於端到端 - 即使這樣,當Natted時從IP地址被重寫。我想我的答案是,除非所有的東西都在同一個網段上,或者你的路由器設置爲代理ARP(這不太現實),否則不可能。

1

你所說的一切我能想到的...

源MAC地址更改爲分組從設備跳躍到設備所以除非客戶端在同一個子網中,服務器將無法獲取MAC地址。 (你可以通過ARP來實現)

一個經過簽名的java applet或activex控件將是最簡單的解決方案。它可以(幾乎被動地)獲得所需的所有網絡信息(IE甚至不會提示運行已簽名的小程序)

如果您完全知道使用該服務的網絡,那麼您可能通過SNMP或CDP查詢網關的客戶端列表。您將能夠將IP地址映射到MAC地址......但這真的是與供應商有關(但是很普遍),並且不會比擁有小程序更好(imo)。

0

您只能在同一網絡上的機器的ARP表中獲得MAC條目。如果通過路由器連接到計算機,則只能在ARP表中看到路由器的MAC地址。因此無法知道外部主機的MAC地址,除非它是同一網絡上的主機(不涉及路由器)。

順便說一下,有很多similar question SO。

0

如果它是Windows系統,你可以使用nbtstat -A 這將返回的NetBIOS信息和IP有

如SMS或的Altiris任何管理系統都會有這樣的信息

DHCP服務器一個好主意

如果是本地的,你可以ping它然後快速運行ARP -a 尋找IP,MAC就在那裏。 您可能需要編寫一個小批處理文件。

如果您有權訪問PC,則可以使用WMI訪問Nic與DHCP的信息。

0

如上所述,如果主機位於同一子網中,我們可以從已知IP地址獲取MAC地址。先ping那個ip;然後看看arp -a | grep並解析nix *上的字符串以獲取mac地址。

我們可以從所有的編程語言標準API中發出系統命令,並且可以解析輸出以獲得mac地址.Java api可以ping一個IP,但我不確定我們是否解析ping輸出(某些庫可以做到這一點)。 避免發佈系統命令並找到替代解決方案會更好,因爲它不是真正實現平臺無關的方法。

禮貌:Professor Saleem Bhatti

2

使用以下命令:

getmac /s destIp 

獲得遠程會話的MAC地址。

相關問題