Python端口扫描原理:基于TCP协议进行端口扫描,若TCP可通,则说明端口可用,反之端口不可用。
# 用socket模块进行最简单的扫描
import socket
for port in range(1, 65536):
try:
s = socket.socket()
s.settimeout(0.5) # 设置无连接情况下的超时时间,提升扫描效率
s.connect((ip, port))
print(f"端口:{port}可用")
s.close()
except: # 没连接成功会报错
pass
import socket, threading
def socket_port(ip, start):
for port in range(start, start+50):
try:
s = socket.socket()
s.settimeout(0.5)
s.connect((ip, port))
print(f"端口:{port}可用")
s.close()
except:
pass
if __name__ == '__main__':
ip = '192.168.121.133'
for i in range(1, 1000, 50): # 扫描1000个端口
threading.Tread(target=socket_port, args(ip, i)).start()
诚然,这脚本非常好写,原理也很简单,但是却非常容易被检测到,然后服务器便会对ip进行封堵,因此这并不是最优的端口扫描方案,但是是最基础的,有助于学习原理。
思路:优先扫描常用端口,没必要的话就不扫描其他端口。
定义一个常用端口的列表,遍历列表即可。