Python 端口扫描器的批量扫描功能实现方法

2023-04-21 00:00:00 端口 批量 扫描器

Python 端口扫描器的批量扫描功能实现方法如下:

  1. 导入必要的模块
import socket
import threading
  1. 定义扫描函数
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()
  1. 定义主函数并调用扫描函数
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()
  1. 调用主函数进行批量扫描
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 关闭

相关文章