晚安 "你别急,我会慢慢的走出你的世界,不留痕迹"
如何使用Java写一个常见端口扫描器
发表于 2019-6-29 | | 编程开发

0x00 原理分析

我们知道,利用java.net.Socket类建立socket连接,如果无法与指定的IP和端口建立连接,将会抛出IOException。我们用try-catch对这个IOException异常进行捕获,以判断是否成功与指定的IP端口建立连接。如果成功建立了连接,说明指定IP的指定端口已经开放;如果程序抛出了一个IOException异常被我们捕获,则说明指定的IP没有开放指定的端口。扫描指定端口段则是利用循环不断与服务器的指定端口进行连接,供我们判断是否开放。


0x01 前期定义

先定义一组数组为需要扫描的端口:

 

 int[] port = new int[]{
                21, 22, 23, 80, 8080, 88,8888, 3306, 3389, 3312, 445, 443, 1433, 7001
        }; //需要扫描的端口

然后我们使用java.util.Scanner来让我们输入需要扫描的ip

 

Scanner scan = new Scanner(System.in);
        System.out.print("请输入需要扫描的IP:");
        String url= scan.next();
        System.out.println("正在给IP:" + url + "扫描中...");

0x02 核心算法

下面就是我们的核心算法了。循环指定端口段的所有端口,对所有端口建立连接。连接成功后我们就算完成了当前循环的任务,然后调用close()方法关闭连接。因为在“Socket s = new Socket(url,port)”执行的时候,如果成功建立连接,就不会执行到catch里面;如果不能连接上去就会抛出一个异常被我们捕获,程序就会运行到catch里面,执行catch里面的语句;最后继续下一个循环。

 

 

       for(int nport:port){
            try {
                System.out.print("[+]" + nport);
                Socket sock = new Socket(url, nport); //建立连接
                sock.close();
                System.out.println(" : open");
            } catch (IOException var9) {
                System.out.println(":close");
            }
        }

 


0x04 结言

如果你不愿意自己动手的话,就评论一下。我已经把我写好了的代码放在下面了。自己编译运行即可!

最后我希望各位如果需要转发到自己的博客的话,请带上我们SKY安全团队的版权。

GitHub:https://github.com/52kami/PortScanForJava/

 

发表评论:

TOP