Python 实现端口扫描器

2023-04-21 00:00:00 python 端口 扫描器

”、“www.baidu.com”等。

端口扫描器是一种网络安全工具,用于检测目标主机上哪些端口开放了,哪些端口未开放。本文将介绍如何使用 Python 实现简单的端口扫描器。

工具/环境:

  • Python 3.x
  • socket 模块

步骤:

1、导入需要的模块

在 Python 中,通过 socket 模块提供了一系列函数用于网络编程。在端口扫描器中我们需要使用到其中的 socket.socket() 函数来创建套接字,以及 socket.connect() 函数来连接目标主机。

因此,我们需要在代码的开头导入 socket 模块:

import socket

2、定义端口扫描函数

我们可以将所有的扫描代码封装在一个函数中,方便代码的封装和调用,同时也可以使代码更加清晰易懂。

我们可以使用一个 for 循环遍历需要扫描的端口号,同时在循环中使用 socket.socket() 函数创建 TCP 套接字,然后通过 socket.connect() 函数连接目标主机的 IP 地址和端口号。

如果连接成功,则表示目标主机的该端口开放了;如果连接失败,则表示目标主机的该端口没有开放。

在定义函数时,可以将需要扫描的端口号作为函数的参数,同时也可以设置一个默认的端口列表。

在实现函数时,还需要注意网络连接时需要指定的协议是 TCP,因为端口扫描器通常是针对 TCP 端口的扫描。

函数代码如下:

def port_scan(target_host, ports=[21, 22, 80, 443]):
    """
    端口扫描函数
    :param target_host: 目标主机名称或IP地址
    :param ports: 需要扫描的端口列表
    """
    # 获取目标主机的IP地址
    target_ip = socket.gethostbyname(target_host)

    # 遍历需要扫描的端口号
    for port in ports:
        # 创建TCP socket
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        s.settimeout(1)  # 设置超时时间为1秒

        # 尝试连接目标主机
        result = s.connect_ex((target_ip, port))

        # 判断是否连接成功
        if result == 0:
            print("端口 {} 开放".format(port))
        else:
            print("端口 {} 关闭".format(port))

        # 关闭套接字
        s.close()

在上面的函数中,我们使用了 socket.gethostbyname() 函数来获取目标主机的 IP 地址;使用 socket.socket() 函数创建 TCP 套接字;使用 socket.connect_ex() 函数来连接目标主机,并判断是否连接成功。

3、使用端口扫描函数

在定义好端口扫描函数后,我们可以调用该函数来扫描目标主机的端口了。

假设我们要扫描目标主机 pidancode.com 的 80 端口和 443 端口,可以使用以下代码调用端口扫描函数:

port_scan("pidancode.com", [80, 443])

在代码运行后,将会输出类似以下的结果:

端口 80 开放
端口 443 开放

表示 pidancode.com 主机的 80 端口和 443 端口都开放了。

注意事项:

在使用端口扫描器时,需要注意一些安全性和法律问题。在使用该工具时,需要遵守法律法规和道德规范,同时需要尊重目标主机的所有者和用户的隐私和安全。如果不确定自己的行为是否合法,请咨询相关的法律专业人士。

相关文章