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