使用单线程的简单端口扫描器
程序由以下几部分组成:
1.读取端口及目标服务器
2.测试TCP端口连接
3.输出开放端口结果
#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
from socket import *
# port_scan.py <host> <start_port>-<end_port>
host = sys.argv[1]
portstrs = sys.argv[2].split('-')
start_port = int(portstrs[0])
end_port = int(portstrs[1])
target_ip = gethostbyname(host)
opened_ports = []
for port in range(start_port, end_port):
sock = socket(AF_INET, SOCK_STREAM)
sock.settimeout(10)
result = sock.connect_ex((target_ip, port))
if result == 0:
opened_ports.append(port)
print("Opened ports:")
for i in opened_ports:
print(i)
在cmd上测试就可以知道处于开放状态的端口有哪些
这个网站是常用的端口号与其对应的服务:
http://www.docin.com/p-297998574.html
一个使用多线程的简单端口扫描器
#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
import thread
from socket import *
def tcp_test(port):
sock = socket(AF_INET, SOCK_STREAM)
sock.settimeout(10)
result = sock.connect_ex((target_ip, port))
if result == 0:
lock.acquire()
print "Opened Port:",port
lock.release()
if __name__=='__main__':
# portscan.py <host> <start_port>-<end_port>
host = sys.argv[1]
portstrs = sys.argv[2].split('-')
start_port = int(portstrs[0])
end_port = int(portstrs[1])
target_ip = gethostbyname(host)
lock = thread.allocate_lock()
for port in range(start_port, end_port):
thread.start_new_thread(tcp_test, (port,))
nmap 功能强大的Python端口扫描包
nmap的四项基本功能:
1.主机发现
主机发现发现的原理与Ping命令类似,发送探测包到目标主机,如果收到回复,那么说明目标主机是开启的。
主机发现的探测方式 图:

扫描某范围内哪些IP的主机是活动的
比如:nmap -sn 192.168.1.100-120
///////
2.端口扫描
端口的六个状态
open:端口是开放的。
closed:端口是关闭的。
filtered:端口被防火墙IDS/IPS屏蔽,无法确定其状态。
unfiltered:端口没有被屏蔽,但是否开放需要进一步确定。
closed|filtered :端口是关闭的或被屏蔽。
扫描方式选项
端口参数
///////
3.版本侦测
4.操作系统侦测