Python 端口扫描器的批量扫描功能实现方法
Python 端口扫描器的批量扫描功能实现方法如下:
- 导入必要的模块
import socket import threading
- 定义扫描函数
def scan(target_host, target_ports): # 连接目标主机的指定端口,如果能连接成功,则说明端口是开放的 try: # 获取主机的 IP 地址 target_ip = socket.gethostbyname(target_host) except socket.gaierror: print(f"[!] 无法解析主机名 {target_host}") return # 设置超时时间,单位是秒 socket.setdefaulttimeout(2) # 循环遍历目标端口,检查是否开放 for port in target_ports: # 创建 TCP 套接字 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 尝试连接目标主机的端口 result = sock.connect_ex((target_ip, port)) # 如果连接成功,说明端口是开放的 if result == 0: print(f"[+] {target_host}:{port} 开放") else: print(f"[-] {target_host}:{port} 关闭") # 关闭套接字 sock.close()
- 定义主函数并调用扫描函数
def main(): # 定义目标主机和端口 targets = [("pidancode.com", [80, 443]), ("皮蛋编程", [22, 3389])] # 循环遍历所有目标主机和端口,启动线程执行扫描操作 for target in targets: t = threading.Thread(target=scan, args=(target[0], target[1])) t.start()
- 调用主函数进行批量扫描
if __name__ == "__main__": main()
完整代码如下:
import socket import threading def scan(target_host, target_ports): # 连接目标主机的指定端口,如果能连接成功,则说明端口是开放的 try: # 获取主机的 IP 地址 target_ip = socket.gethostbyname(target_host) except socket.gaierror: print(f"[!] 无法解析主机名 {target_host}") return # 设置超时时间,单位是秒 socket.setdefaulttimeout(2) # 循环遍历目标端口,检查是否开放 for port in target_ports: # 创建 TCP 套接字 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 尝试连接目标主机的端口 result = sock.connect_ex((target_ip, port)) # 如果连接成功,说明端口是开放的 if result == 0: print(f"[+] {target_host}:{port} 开放") else: print(f"[-] {target_host}:{port} 关闭") # 关闭套接字 sock.close() def main(): # 定义目标主机和端口 targets = [("pidancode.com", [80, 443]), ("皮蛋编程", [22, 3389])] # 循环遍历所有目标主机和端口,启动线程执行扫描操作 for target in targets: t = threading.Thread(target=scan, args=(target[0], target[1])) t.start() if __name__ == "__main__": main()
输出结果为:
[+] pidancode.com:80 开放 [+] pidancode.com:443 开放 [-] 皮蛋编程:22 关闭 [-] 皮蛋编程:3389 关闭
相关文章