Python 实现端口状态检测的方法及实战

更新时间:2024-05-02 19:43:29   人气:7995
在计算机网络中,对服务器或主机的端口状态进行实时监测是一项基础且重要的任务。这有助于我们了解服务是否正常运行、系统是否存在安全风险等问题。本文将详细介绍如何使用 Python 进行端口状态检测,并通过一个实际示例来演示其应用。

首先,在Python编程语言下实现端口探测功能可以利用socket模块中的connect()函数或者创建套接字并设置超时时间的方式来完成。以下是一个基本的检查单个端口连通性的代码片段:

python

import socket

def check_port_status(host='localhost', port=80):
try:
# 创建一个新的 Socket 对象,默认是 TCP 协议
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 设置非阻塞模式以及连接超时时间为1秒(可自定义)
sock.settimeout(1)

# 尝试建立与指定 host 和 port 的连接
result = sock.connect_ex((host, int(port)))

if result == 0:
return f"Port {port} on Host {host} is open."
else:
return f"Port {port} on Host {host} seems to be closed or there's no service listening."

except (socket.timeout, ConnectionRefusedError) as e:
return f"A timeout occurred when checking Port {port} on Host {host}. It may not be available."

finally:
# 关闭打开的Socket资源
sock.close()

# 测试该方法
print(check_port_status('www.baidu.com', 443))


上述脚本会尝试去连接目标IP地址和设定好的TCP端口号,如果能够成功建立起链接,则表示对应端口处于开放状态;反之则可能为关闭或者是没有监听的服务存在。

进一步地,如果你需要批量扫描多个端口的状态,可以通过循环结构遍历待测端口列表以提高效率:

python

target_host = 'example.org'
ports_to_check = [21, 22, 80, 443]

for port in ports_to_check:
print(f'Checking status for port {port}: ', end='')

response = check_port_status(target_host, port)
print(response)

以上就是在Python环境下实现端口状态检测的基本过程及其实战运用实例,这种方法简单直观并且实用性强,适用于各种日常运维场景下的需求。当然,请注意合理合法合规地使用此技术手段,避免对他人的信息系统造成不必要的干扰甚至侵犯他人权益的行为发生。