假設我運行了幾臺在本地網絡上提供基本請求的服務器(比如說一個家庭網絡,所有機器通常都有一個IP,形式爲K.K.K.x,其中x是可變的)。有沒有簡單的方法來發現所有這些服務器?我需要在運行特定Java服務器應用程序的網絡上查找每個IP。如何發現本地網絡上的Web服務器?
回答
讓您擁有一個C類網絡...只是嘗試打開1和254之間的每個IP地址的特定服務器應用程序的端口如果你想獲得幻想,你可以做一些檢查,以驗證該端口實際上是打開的,它可以滿足你對該應用程序的期望。
因爲不是每個Web服務器的80
固定端口上偵聽,您需要掃描端口。在每個端口上打開(並關閉!)一個套接字,您可以使用java.net.Socket
。如果成功,然後在有關IP /端口上的/
上發起一個簡單的GET請求,則可以使用java.net.URLConnection
。如果您收到有效的HTTP響應(不管狀態碼如何),那麼它是一個網絡服務器。您可以通過HTTP響應中的Server
頭來確定服務器類型。但是,您需要考慮到服務器管理員可能會欺騙/刪除/更改默認響應標頭。
注意,一些防火牆可以識別端口掃描器的掃描圖案並阻止此。
我會scan IP range和測試插座連接到端口80,這樣的代碼:
try {
s = new Socket(addr,80);
System.out.println("Webserver found on IP:" + addr);
s.close();
}
catch (IOException ex) {
System.out.println("Webserver NOT found on IP:" + addr);
}
不要忘記's.close()'。 – jweyrich 2010-04-26 23:56:45
您是否正在尋找您的Java應用程序中的解決方案?如果您只是在尋找一次性解決方案,nmap應該可以工作。
如果你的本地網絡的形式爲192 * * *試試這個(我加了sudo的,因爲它必須以root身份運行)。
sudo nmap -vv -sS -O -n "192.168.1.1/24"
+1 - 快速且非常強大。 – 2010-04-26 23:06:55
需要root用戶,因爲您提供的選項執行SYN掃描,這依賴於RAW套接字,並且只能由超級用戶創建。 – jweyrich 2010-04-26 23:07:21
有兩種基本的方法來實現這一點,並且都要求您向要檢查的每個主機發送/接收數據包。
最簡單的方法是試圖建立TCP連接所需的端口,如你通常做。
一個更復雜的和花式的方法,但在執行方面更快,正在發送一個SYN分組,並且等待一個響應分組。如果響應是SYN/ACK,則表示端口已打開(等待連接),否則不是。但是,Java沒有爲此提供必要的API(請參閱raw socket)。你必須找到一個庫/包裝器或使用C和JNI編寫一個庫。
更多的見解,第二個選項,閱讀this。
這樣做需要能夠推送原始數據包,通常A)不能從Java執行,B)不可取,因爲發送原始數據包需要額外的系統特權。如果人們沒有以管理員身份運行Windows,那麼惡意軟件感染的情況就會少得多。 – 2010-04-26 23:27:26
@Devon是正確的,我正在更新我的答案,提到Java沒有必要的API。 Microsoft刪除了對XP-SP2上原始套接字創建的支持,但您仍然可以創建/發送以太網幀。 – jweyrich 2010-04-26 23:42:18
- 1. 如何訪問本地網絡(LAN)Web服務器上的網站?
- 2. 在默認網絡服務器上發佈web服務
- 3. 如何模擬本地服務器上的網絡崩潰?
- 4. 如何從本地網絡服務器發送郵件
- 5. TCP - JAVA - 如何在本地網絡上查找服務器?
- 6. Android:網絡服務發現
- 7. CURL - 本地與網絡服務器
- 8. $ _SERVER [DOCUMENT_ROOT]本地Apache網絡服務器
- 9. 網絡服務器上的Python腳本
- 10. 在本地網絡中使用Visual Studio Web服務器
- 11. 如何發現Windows Phone 7上的本地網絡資源
- 12. 發現內部網絡上的Microsoft SQL服務器
- 13. 網絡服務器上的本地數據
- 14. 沒有網絡服務器的web-gui
- 15. 在iphone上的網絡服務器和服務發現應用程序
- 16. 如何從IPad連接到本地網絡NodeJS服務器?
- 17. 我如何比較兩個iOS本地網絡服務器?
- 18. 始終顯示404非網絡部署的Web服務發現
- 19. 在本地網絡上搜索服務器
- 20. 在本地網絡服務器上搜索文件directorys
- 21. 從本地網絡服務器在BlackBerry上流式傳輸MP3
- 22. 沒有填充本地主機,但在網絡服務器上?
- 23. 在本地網絡(域)服務器上訪問TFS
- 24. Asp.Net,上傳圖片與VS2008本地網絡服務器
- 25. 如何瀏覽本地網絡上的Wordpress鏈接WAMP服務器
- 26. 本地消費的網絡服務
- 27. 本地網絡中的WCF服務
- 28. 開發Web服務器上的基本Subversion服務器問題
- 29. 實現網絡地圖服務
- 30. asp.net DB:如何處理在網絡服務器上發佈?
我並不太熱衷於網絡。我可以運行1-254,但是如何以跨平臺的方式獲取IP地址的前3個字節?我的直覺說,有一些工具,如ipconfig/ifconfig,有適當的參數,將返回本地IPV4地址(這將給我我需要的字節),但我想知道是否有更多的java-ish方式。 – 2010-04-27 01:50:43
杜。我只是搜索「獲取IP地址Java」。這應該很好。 – 2010-04-27 02:06:10