2011-02-10 18 views
1

特定のIPアドレスを実行しているサービスがあるポートを確認する方法を教えてください。 (javaのコードをお願いします)どのポートが使用されているかを確認してください

編集:私のprofは「プログラムが実行中のサービスを検出するたびに、メッセージを印刷する必要があります」と尋ねます。それで、私は彼が私にどのポートが使用されているかを知りたいと思った。しかし、私は彼にもう一度尋ねた。そして、彼は私にちょうど空いている(使用されていない)ポートを検出する必要があると私に言った。

私は自分の問題を解決すると思います。 ありがとうございます。

+0

「nmap」のような意味ですか? (http://nmap.org)。 – msandiford

答えて

0

コマンドプロンプトでnetstatコマンドを使用してみてください。 netstat -hと入力するとヘルプが表示されますが、netstat -bは実行中のプロセスを表示します。

0

javaまたはport scanからコマンドライン引数(netstatなど)を実行する必要があります。ポートスキャンは、使用されていなくてもリッスンできないポートも検出します。たとえば、root以外の場合は、システムはポート443を許可しない可能性があります。

ような何か:あなたはこれを見て、そのコンピュータのポート状況を確認するには、コンピュータ上でJavaプログラムを実行している

for(int port=0; port<65536; port++) 
{ 
    try 
    { 
     new ServerSocket(port); 
     System.out.println("Successfully listend on port " + port); 
     //clean up socket here 
    } 
    catch (IOException e) 
    { 
     System.out.println("Could not listen on port " + port); 
    } 
} 
+0

"ポートで受信できませんでした"とは、そのポートでサービスが実行されていることを意味しますか?私が望むのは、そのポートにサービスがあるかどうかを検出することです。 – John

+1

これはあなた自身のシステム用です。私は彼がリモートシステムについて尋ねていると思う。この基本コードは、クライアントソケットを使用してリモートシステムに接続しようとすることを除いて、引き続き動作します。 – Jumbogram

+0

申し訳ありません。私はそれらのうちの一つから "not"という言葉を取るのを忘れていました。 –

0

を意味する場合。

Checking port availability in Java

リモートコンピュータ、幸運からポート情報を取得するためにJavaプログラムを使用することを意味した場合。あなたは、異なるポートに接続し、どのポートが接続を拒否しているかを調べることができます。しかしそれはひどい考えです。

+0

接続が拒否された場合は、そのポートが使用されていることを意味しますか? – John

+0

申し訳ありませんが、おそらく間違った言葉でした。接続を受け入れる/受信していないIP /ポートに接続しようとすると、タイムアウトエラーが発生します。具体的には、これを取得する可能性があります: java.net.ConnectException:接続タイムアウト:接続 – Coeffect

1
InetAddress addr = InetAddress.getByName("hostName"); 
Socket socket = new Socket(addr, 8090); 

ヒット/トライアルの考え方は、異なるポートを試すことです。上記のコードスニペットが例外をスローしない場合、ホストはそのポートで接続を受け入れています。そうでない場合は、通常はConnectExceptionという例外が表示されます。 私はそれについては理想的な方法を示唆していませんが、単なる選択肢です。

+0

はい、私は無料のポートを見つける方法を知っています。しかし、私が望むのは、実行中のサービスがあるポートを見つけることです。 – John

1
public int getServiceByName(String tcpipService, String tcpipClass) { 
    int port = -1; 
    try { 
     String line; 
     BufferedReader br = new BufferedReader(
        new InputStreamReader(
         new FileInputStream(
         "/etc/services"))); 
     while (((line = br.readLine()) != null) 
       && (port == -1)) { 
      if ((line.length() != 0) 
        && (line.charAt(0) != '#')) { 
       port = parseServicesLine(line, 
        tcpipService, tcpipClass); 
      } 
     } 
     br.close(); 
     return (port); 
    } catch (IOException ioe) { 
     return -1; 
    } 
} 

private int parseServicesLine(String line, 
     String tcpipService) { 
    StringTokenizer st = new 
     StringTokenizer(line, " \t/#"); 

    if (! st.hasMoreTokens()) { 
     return -1; // error 
    } 
    String name = st.nextToken().trim(); 

    if (! st.hasMoreTokens()) { 
     return -1; // error 
    } 
    String portValue = st.nextToken().trim(); 

    // Return port number, if name on this line matches: 
    if (name.equals(tcpipService)) { 
     try { 
      return (Integer.parseInt(portValue)); 
     } catch (NumberFormatException nfe) { 
      return -1; 
     } 
    } else { 
     return -1; 
    } 
} 

上記のコードスニペットは、サービス名に対して/ etc/inet/servicesファイルを検索し、ポート番号を返します。

関連する問題