11. Socketクラスでポートスキャン TcpScan.java

サーバ、あるいは自マシンのポートをスキャンするプログラム。

 

TcpScan.java

//
// TcpScan.java
//
// サーバのポートをスキャンする
//
// java TcpScan (www.mydomain.com)
//

import java.net.Socket ;

public class TcpScan {

public static void main( String[] args ) {

Socket sock = null ; // サーバ接続用ソケット
int countPorts = 0 ; // 使用中ポートのカウント
String hostName = "localhost" ; // ホスト名

// ホスト名を指定した場合
if ( args.length > 0 ) {
hostName = args[0] ;
}

// 0〜127のポートをスキャンする
for ( int port = 0 ; port < 128 ; port++ ) {
System.out.print( "¥r" + port + "を調査中!" ) ;
try{
sock = new Socket( hostName, port ) ; // 接続する
System.out.println( "¥r" + port + "を使用中!" ) ;
countPorts++ ; // 使用しているポートとしてカウントする
sock.close() ; // クローズ
} catch( Exception e ) {
continue ;
}
}

// 使用しているポートの数を報告する
System.out.println( "¥r" + countPorts + "個のポートが使用されています。" ) ;
}
}

 

■実行

自マシンを調べる。

$ java TcpScan          
21を使用中!
22を使用中!
80を使用中!
3個のポートが使用されています。

使用中のポートが表示されなかったら、

システム環境設定 > 共有

で、パーソナルWeb共有、リモートログイン、FTPサービスにチェックを入れる。

 

 自サーバを調べる。自分の会社のサーバを調べて余計なポートが開いてないかをチェックしましょう。

 $ java TcpScan xxx.xxxx.com
21を使用中!
22を使用中!
25を使用中!
53を使用中!
80を使用中!
110を使用中!
113を使用中!
7個のポートが使用されています

 他人様のサーバをポートスキャンするのは控えましょう。クラッカーと疑われると損ですので。

 

■確認

 netstat で調べてみる。

$ netstat -p tcp -a 

 あまりにもたくさんひょうじされるので、LISTENに絞って表示すると多少見やすい。

$ netstat -p tcp -a | grep LISTEN 
tcp4 0 0 *.ssh *.* LISTEN
tcp6 0 0 *.22 *.* LISTEN
tcp4 0 0 *.http *.* LISTEN