2009-10-24 21 views

回答

0

你爲什麼要他們,爲什麼他們必須是名字?並非所有系統都有名稱。

什麼樣的系統,你想枚舉?

如果你想找到自己的應用程序的附近實例,使用多播UDP來創建一個發現協議。

如果你想找到它有自己爲此協議的一些服務器,然後使用它的一個。

2

我在Java中用來實現這一被稱爲JCIFS包。這裏是 Library的鏈接。

請注意,以識別子網則需要ping通子網中的所有avaliable IP地址的機器。從那裏你可以做一個反向IP地址查詢來獲取機器的詳細信息。

從從OSI內存爲什麼要ping所有的網絡上的機器的原因是因爲ICMP仍然在OSI模型的最低層。儘管你不能只信任對子網上的所有機器使用ICMP(ping)請求。這是因爲大多數Windows機器防止釣魚攻擊會阻止該協議。相反,您需要採取兩階段檢測方法。首先,通過ICMP ping請求在SubNet Ip地址上廣播。在等待1秒後從ICMP ping請求中,繼續執行到未響應IP地址的SMB連接。您會發現大多數人都將擁有Microsoft網絡的共享打印機,該打印機將響應該端口下的請求。

另一種方法是使用一個NetBIOS反向名稱查找,但它仍然涉及濫發的子網的IP地址範圍。

希望這會有所幫助。

+0

嗨感謝您回覆我的郵件,我可以有一些代碼如何使用Jcif類,以及如何獲得系統名稱連接在lOO – Bharath 2009-11-02 06:38:47

+0

http://www.hipergate.org/docs/api/4.0。0/com/knowgate/jcifs/netbios/NbtAddress.html NbtAddress.getByName(ipAddress).isActive() 請注意,您需要爲每個.getByName創建一個線程,因爲它會將當前線程當它等待迴應時睡覺。或者它會超時。 – Chad 2009-11-02 10:45:03

+0

我無法使用jcifs使用線程獲取lan中的所有系統名稱。可以通過給出單個系統ip地址獲取所有名稱,如何爲每個系統名稱使用線程。可以使用代碼如何獲取所有系統名字在lan.Please幫我在這.. – Bharath 2009-11-09 05:20:47

0

如果我要去嘗試在Java中實現這一點,我會選擇一些未使用的TCP/IP端口號,然後嘗試打開一個套接字在局域網的IP地址範圍(S)每個IP地址。您預計所有連接嘗試都會失敗,但根據機器是否使用IP地址,它們會以不同的方式失敗。如果IP地址正在使用中,您應該得到「拒絕連接」。如果它沒有被使用,你應該得到「沒有路由到主機」或「沒有路由到網絡」。 「連接超時」可能表示主機是防火牆,或者最近存在但目前沒有活動。

另一種方法(我不知道是你可以從Java做的)是發送ARP請求每個IP地址的網絡地址範圍,看看在你的機器的ARP緩存輪番上漲。

和當然,你可以嘗試發送ICMP ping消息,但他們可能通過防火牆。

一旦你有活的IP地址列表,請使用DNS反向查找,找到相應的DNS名稱。但請注意,並非所有IP地址都綁定到DNS名稱。

然而這一切都有點微妙因爲很多機器和網絡的使用各種防火牆,而這些都不會放棄網絡郵件或發送誤導性反應。

相關問題