0
点赞
收藏
分享

微信扫一扫

python3 判断网站端口

程序员阿狸 2023-07-25 阅读 57

python3 判断网站端口

在网络通信中,端口是用于标识不同服务的数字。对于网站来说,常用的端口是80(HTTP)和443(HTTPS)。在开发和测试过程中,我们经常需要判断一个网站的端口是否打开或者监听。本文将介绍如何使用 Python 3 判断网站端口的状态,并提供相应的代码示例。

使用 socket 模块

Python 的 socket 模块提供了一个简单而强大的接口来进行网络编程。我们可以使用 socket 模块中的 socket 类来创建一个 TCP 连接,并使用该连接来判断网站端口的状态。

下面是一个使用 socket 模块判断网站端口的示例代码:

import socket

def check_port(host, port):
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    result = sock.connect_ex((host, port))
    sock.close()
    if result == 0:
        return "端口打开"
    else:
        return "端口关闭"

# 示例:判断百度的80端口是否打开
host = "www.baidu.com"
port = 80
print(f"网站 {host} 的 {port} 端口状态:{check_port(host, port)}")

在上述代码中,我们定义了一个 check_port 函数,它接受一个主机地址和一个端口号作为输入,并返回该端口的状态。我们通过调用 socket.socket 创建一个 TCP 连接,然后使用 connect_ex 方法来尝试连接该主机和端口。connect_ex 方法会返回一个错误代码,如果返回值为 0,则表示连接成功,即端口打开;否则,表示连接失败,即端口关闭。

在示例中,我们判断了百度的 80 端口是否打开,并输出相应的结果。

异步判断多个端口

有时我们需要同时判断多个端口的状态,如果使用串行方式逐个判断,会导致效率较低。这时我们可以使用 Python 的 asyncio 模块来实现异步判断。

下面是一个使用 asyncio 模块异步判断多个端口的示例代码:

import asyncio

async def check_port(host, port):
    try:
        reader, writer = await asyncio.open_connection(host, port)
        writer.close()
        await writer.wait_closed()
        return "端口打开"
    except (ConnectionRefusedError, TimeoutError):
        return "端口关闭"

# 示例:判断百度的80和443端口是否打开
host = "www.baidu.com"
ports = [80, 443]
asyncio.run(asyncio.wait([check_port(host, port) for port in ports]))

在上述代码中,我们定义了一个 check_port 异步函数。使用 asyncio.open_connection 方法创建一个异步的 TCP 连接,然后关闭连接并等待连接关闭。如果连接成功,则表示端口打开;如果连接失败,则表示端口关闭。

在示例中,我们使用了 asyncio.wait 方法来同时进行多个异步任务,通过列表推导式创建了多个 check_port 异步函数的调用。这样可以并发地判断多个端口的状态。

总结

本文介绍了如何使用 Python 3 判断网站端口的状态,并提供了相应的代码示例。通过 socket 模块和 asyncio 模块,我们可以方便地判断一个或多个网站端口的状态,从而进行网络开发和测试工作。

希望本文对你理解和使用 Python 判断网站端口有所帮助。如果你想进一步了解相关知识,可以查阅官方文档和相关教程。祝愉快编程!

举报

相关推荐

0 条评论