Python 实现 TCP 和 UDP 端口扫描的方法

2023-04-21 00:00:00 python 方法 端口扫描

TCP 端口扫描

TCP 端口扫描指的是使用 TCP 协议进行端口扫描,即向目标主机发送连接请求,如果连接成功,则说明该端口是打开状态,否则该端口是关闭状态。

Python 的 socket 模块可以用来实现 TCP 端口扫描。

实现步骤:

  1. 导入 socket 模块

  2. 创建一个 socket 对象

  3. 设置连接超时时间

  4. 循环扫描目标主机的端口

  5. 发送连接请求,如果连接成功,则说明该端口是打开状态

  6. 关闭 socket 连接

代码演示:

import socket

# 定义目标主机和端口范围
target_host = "pidancode.com"
target_port_range = range(1, 100)

# 创建一个 socket 对象
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 设置连接超时时间
client.settimeout(0.1)

# 循环扫描目标主机的端口
for target_port in target_port_range:
    try:
        # 发送连接请求,如果连接成功,则说明该端口是打开状态
        client.connect((target_host, target_port))
        print(f"Port {target_port} is open")
    except:
        pass

    # 关闭 socket 连接
    client.close()

UDP 端口扫描

UDP 端口扫描指的是使用 UDP 协议进行端口扫描,即向目标主机发送消息,如果可以收到响应,则说明该端口是打开状态,否则该端口是关闭状态。

Python 的 socket 模块同样可以用来实现 UDP 端口扫描。

实现步骤:

  1. 导入 socket 模块

  2. 创建一个 socket 对象

  3. 设置超时时间

  4. 循环扫描目标主机的端口

  5. 发送 UDP 消息,如果可以收到响应,则说明该端口是打开状态

  6. 关闭 socket 连接

代码演示:

import socket

# 定义目标主机和端口范围
target_host = "pidancode.com"
target_port_range = range(1, 100)

# 创建一个 socket 对象
client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

# 设置超时时间
client.settimeout(0.1)

# 循环扫描目标主机的端口
for target_port in target_port_range:
    try:
        # 发送 UDP 消息,如果可以收到响应,则说明该端口是打开状态
        client.sendto(b"Hello", (target_host, target_port))
        data, addr = client.recvfrom(1024)
        print(f"Port {target_port} is open")
    except:
        pass

    # 关闭 socket 连接
    client.close()

注意事项:

TCP 端口扫描和 UDP 端口扫描在实现上有一些细微的差别,需要注意。

其中,TCP 端口扫描使用的是 socket.SOCK_STREAM,UDP 端口扫描使用的是 socket.SOCK_DGRAM。另外,TCP 端口扫描使用的是 connect() 方法,UDP 端口扫描使用的是 sendto() 和 recvfrom() 方法。

相关文章