端口扫描有哪几种方式


当前第2页 返回上一页

使用方法

1

2

3

4

5

6

7

8

9

10

11

扫描扫描443端口的B类子网

Masscan 10.11.0.0/16 -p443

扫描80或443端口的B类子网

Masscan 10.11.0.0/16 -p80,443

扫描100个常见端口的B类子网,每秒100,000个数据包

Masscan 10.11.0.0/16  --top-ports 100 -rate 100000

 

结果输出

-oX filename:输出到filename的XML。

-oG filename:输出到filename在的grepable格式。

-oJ filename:输出到filename在JSON格式。

3、socket探测端口

socket 探测端口发送的不是完整的三次握手包如下,

A:192.168.70.142

B:192.168.0.143 开放端口3306

A接收到B返回的syn+ack数据包后,A把数据丢弃。

097478369e319b15c30e3c4df84d686.png

探测不开放端口

A发送syn,B没有开放33端口,所以返回RST数据包。

794bf36a5ad4d87874d11368f9cb057.png

1

2

3

4

5

6

7

8

9

10

11

12

13

14

def portscan(ip,port):

    try:

        s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

        s.settimeout(0.2)

        status = s.connect_ex((ip,port))

        if status == 0:

            temp_str = str(ip) + "---" + str(port) + "---open"

            port_list.append(temp_str)

        else:

            pass

    except Exception as e:

        pass

    finally:

        s.close()

6454bd2648b1e56ce07a96a0160d753.png

探测10个ip花费了26.3s差不多一个2.6s。

4、telnet探测端口

telnet 探测端口采用完整的三次握手连接,使用命令 telnet ip port ,发包流程如下

A:192.168.70.142

B:192.168.0.143 开放端口3306

telnet 192.168.0.143 3306

过程如下:

使用TCP三次握手建立连接: SYN -> SYN+ACK + ACK

36a6d07df2eba422d7c2e56e6903e4b.png

探测不存在端口,发送SYN数据包,然后RST包丢弃。

be0595a2cf52b5ac41731bfeb6d9ea1.png

如果有返回值,则说明端口开放,否则则端口关闭。

1

2

3

4

5

6

7

8

9

def portscan(ip,port):

     try:

         t = telnetlib.Telnet(ip,port=port,timeout=0.2)

         if t:

             temp_str = str(ip) + '---' + str(port)

             port_list.append(temp_str)

 except Exception as e:

     print(e)

     pass

77cdbf1c5c969e081ee922e8d0ee8f3.png

探测10个ip花费了27.8s差不多一个2.7s。

5、nc探测端口

nc探测端口采用完整的三次握手连接,使用命令 nc -v -w 1 -z ip port,发包过程和telent 探测一样。

探测开放端口的数据包

b5679be33a3c571270d3a2c67108f34.png

探测未开放端口的数据包

8048ee0f6e5f8527daf1fba419536bc.png

端口开放,返回值为0,可以依此作为判断依据。

1

2

3

4

5

6

7

8

def portscan(ip,port):

     command = 'nc -v -w 1 -z {0} {1}'.format(ip,port)

     m = os.system(command)

     if m == 0:

         temp_str = str(ip) + "---" + str(port)

         port_list.append(temp_str)

     else:

         pass

eb3b07b6312ba4d7f28fc8f58d4c8bf.png

备注:比如你想探测某个指定的端口开放情况,推荐使用nc。

总结

nmap 作为扫描端口的神器,扫描出的结果比其他几种方式要详细。如果追求效率的话,建议采用socket。相比于nmap,socket会存在漏报情况,笔者在测试某主机时,nmap扫出了8888端口,但是socket没有。

以上就是端口扫描有哪几种方式的详细内容,更多文章请关注木庄网络博客

返回前面的内容

相关阅读 >>

端口扫描有哪几种方式

更多相关阅读请进入《端口扫描》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...