当前第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把数据丢弃。

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

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()
|

探测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

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

如果有返回值,则说明端口开放,否则则端口关闭。
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
|

探测10个ip花费了27.8s差不多一个2.7s。
5、nc探测端口
nc探测端口采用完整的三次握手连接,使用命令 nc -v -w 1 -z ip port,发包过程和telent 探测一样。
探测开放端口的数据包

探测未开放端口的数据包

端口开放,返回值为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
|

备注:比如你想探测某个指定的端口开放情况,推荐使用nc。
总结
nmap 作为扫描端口的神器,扫描出的结果比其他几种方式要详细。如果追求效率的话,建议采用socket。相比于nmap,socket会存在漏报情况,笔者在测试某主机时,nmap扫出了8888端口,但是socket没有。
以上就是端口扫描有哪几种方式的详细内容,更多文章请关注木庄网络博客!
返回前面的内容
相关阅读 >>
端口扫描有哪几种方式
更多相关阅读请进入《端口扫描》频道 >>
转载请注明出处:木庄网络博客 » 端口扫描有哪几种方式