假設我運行了幾臺在本地網絡上提供基本請求的服務器(比如說一個家庭網絡,所有機器通常都有一個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. 如何發現網絡上的Tomcat服務器的IP地址?
- 2. Python服務發現:通過本地網絡發佈服務
- 3. 如何訪問本地網絡(LAN)Web服務器上的網站?
- 4. 使用android作爲本地網絡上的網絡服務器
- 5. 如何在本地網絡中提供ASP.NET Web API Web服務
- 6. 在默認網絡服務器上發佈web服務
- 7. 如何模擬本地服務器上的網絡崩潰?
- 8. 服務器的網絡發現
- 9. 如何從本地網絡服務器發送郵件
- 10. 如何通過本地網絡向服務器發送請求
- 11. 本地網絡上可用的本地數據庫服務器?
- 12. 如何從另一本地網絡服務器訪問本地網絡服務器的數據庫
- 13. TCP - JAVA - 如何在本地網絡上查找服務器?
- 14. Android:網絡服務發現
- 15. 網絡服務發現Android
- 16. 如何將文件服務器服務發佈到本地網絡?
- 17. 啓用本地網絡訪問WAMP服務器上的網站
- 18. CURL - 本地與網絡服務器
- 19. 從本地網絡訪問服務器
- 20. $ _SERVER [DOCUMENT_ROOT]本地Apache網絡服務器
- 21. 網絡服務器上的Python腳本
- 22. 通過本地網絡訪問Visual Studio 2010 Web服務器
- 23. 在本地網絡中使用Visual Studio Web服務器
- 24. 如何發現Windows Phone 7上的本地網絡資源
- 25. 發現內部網絡上的Microsoft SQL服務器
- 26. Git設置爲web開發沒有git服務器,使用本地網絡
- 27. 滑塊出現在本地主機上,但不在網絡服務器上
- 28. 通過網絡訪問本地網絡服務器
- 29. 網絡服務器上的本地數據
- 30. 沒有網絡服務器的web-gui
我並不太熱衷於網絡。我可以運行1-254,但是如何以跨平臺的方式獲取IP地址的前3個字節?我的直覺說,有一些工具,如ipconfig/ifconfig,有適當的參數,將返回本地IPV4地址(這將給我我需要的字節),但我想知道是否有更多的java-ish方式。 – 2010-04-27 01:50:43
杜。我只是搜索「獲取IP地址Java」。這應該很好。 – 2010-04-27 02:06:10