【Python】基于Socket的端口扫描

前言

​ 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进行封堵,因此这并不是最优的端口扫描方案,但是是最基础的,有助于学习原理。

优化

思路:优先扫描常用端口,没必要的话就不扫描其他端口。

定义一个常用端口的列表,遍历列表即可。

你可能感兴趣的:(python,开发语言)