我已經看過其他帖子,但沒有一個是特定的。如果它是重複的,將其標記爲這樣,我將刪除它。Java:如何確認端口是否打開?
我想知道如何確認一個TCP端口是否打開或顯然,我正在創建一個套接字並調用connect()到指定的InetAddress和端口號。我的測試表明,如果端口未打開,則拋出IOException,並且如果端口處於打開狀態,則不會出現異常。
捕獲異常是檢查端口是否打開的唯一方法嗎? 此外,也許更重要的是,如果沒有拋出異常並執行connect()後的行,那麼這是否意味着整個TCP連接已完成併成功?我在問,因爲顯然isConnected()在某些情況下並不總是返回預期的結果,所以我不確定它是否可靠。我是否需要實際閱讀或寫信給港口以進行確認?
端口掃描器在多大程度上完成握手?不知道我是否與另一種技術混淆,但我認爲他們會發送一個SYN,但從來沒有一個ACK,因此它不能被視爲已確認的連接(以防止被我認爲的服務器記錄)。 – user58446
有用於Java的庫可以打開原始套接字,但是syn掃描的目的是與安全性相關的,因爲有些防火牆配置可以確定套接字是打開的但是被防火牆阻止。簡單地發送SYN不是一個完整的連接,所以不可能通過該連接發送數據。 –
在我標記你的答案之前,只需重複一遍,在沒有發送數據的情況下無法確認套接字/端口連接是否完成。但在正常情況下,如果在使用Java套接字類調用socket.connect()時沒有拋出異常,則可以將該端口假定爲開放。 – user58446