Python检查端口是否打开的七种方法总结
作者:小龙在山东
sock.connect_ex
使用socket模块的connect_ex来判断端口是否打开,如果返回值是0表示连接成功,端口打开,否则端口关闭。
import socket def check_port(ip, port): sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.settimeout(5) try: result = sock.connect_ex((ip, port)) if result == 0: return True else: return False except Exception as e: print(f"错误: {str(e)}") finally: sock.close() host = 'localhost' port = 80 if check_port(host, port): print(f'The port {port} on {host} is open.') else: print(f'The port {port} on {host} is closed.')
sock.connect
使用socket模块的connect来判断端口是否打开,如果未发生异常表示连接成功,端口打开,否则端口关闭。
import socket def check_port(host, port): try: sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.settimeout(1) sock.connect((host, port)) sock.close() return True except: return False finally: sock.close()
telnet命令
调用telnet命令来判断端口是否打开。
使用telnet命令:在大多数操作系统中,telnet命令可以用于测试端口是否开放。你可以在命令行中输入"telnet <IP地址> <端口>",如果端口是开放的,则telnet会连接成功并返回一些信息。否则,它将返回一个错误消息。
import os def check_port(ip, port): result = os.system(f"telnet {ip} {port} > /dev/null 2>&1") if result == 0: print(f"端口 {port} 是开放的") else: print(f"端口 {port} 是关闭的")
nc命令
使用nc命令(也称为netcat):nc命令是一个强大的工具,可以用于测试端口是否开放。你可以在命令行中输入"nc -zv <IP地址> <端口>",如果端口是开放的,则nc会连接成功并返回一些信息。否则,它将返回一个错误消息。
import os def check_port(ip, port): result = os.system(f"nc -zv {ip} {port} > /dev/null 2>&1") if result == 0: print(f"端口 {port} 是开放的") else: print(f"端口 {port} 是关闭的")
ping命令
使用ping命令:ping命令可以用于测试网络连接是否畅通,也可以用于检查端口是否开放。在命令行中输入"ping <IP地址> -n <端口>",如果端口是开放的,则ping会返回一些信息。否则,它将返回一个错误消息。
import os def check_port(ip, port): result = os.system(f"ping {ip} -n {port} > /dev/null 2>&1") if result == 0: print(f"端口 {port} 是开放的") else: print(f"端口 {port} 是关闭的")
注意:如果目标服务器禁用ping,就无法判断出来了。
requests检查http端口
requests库是Python的一个HTTP库,可以用来发送所有类型的HTTP请求,包括GET、POST、PUT、DELETE等。它也可以用来处理cookies、会话、重定向等。
要检查一个端口是否开放,我们通常会使用requests库来尝试向该端口发送HTTP请求,并查看是否能够成功连接。以下是一个简单的示例:
import requests def check_port(ip, port): try: response = requests.get(f"http://{ip}:{port}") if response.status_code == 200: print(f"端口 {port} 是开放的") else: print(f"端口 {port} 是关闭的") except requests.exceptions.ConnectionError: print(f"端口 {port} 是关闭的")
在上述代码中,我们使用requests.get方法向指定的IP地址和端口发送GET请求。如果请求成功,并且返回的状态码为200,则表示该端口是开放的。如果发生requests.exceptions.ConnectionError
异常,则表示该端口是关闭的。requests检查端口方法仅适用于HTTP和HTTPS端口。
Scapy
Scapy是一个强大的Python库,用于创建、解析、发送、接收并解析网络数据包。使用Scapy来检查端口是否开放。
from scapy.all import * def check_port(ip, port): # 构造一个ICMP数据包,并发送到目标IP地址和端口 packet = IP(dst=ip) / ICMP() / Raw(load=str(port)) # 发送数据包并获取响应 response = sr1(packet, timeout=1) # 检查响应是否为ICMP错误类型 if response is None or response.type != ICMP.DEST_UNREACH: print(f"端口 {port} 是开放的") else: print(f"端口 {port} 是关闭的") # 测试函数 check_port('127.0.0.1', 80)
我们使用Scapy构造了一个ICMP数据包,并将目标端口作为负载包含在其中。然后,我们发送该数据包并等待响应。如果响应是ICMP错误类型(目的地不可达),则表示端口是关闭的。否则,表示端口是开放的。这种方法只适用于ICMP端口扫描。对于其他类型的端口扫描(如TCP或UDP端口扫描),需要使用不同的协议和字段。
总结
到此这篇关于Python检查端口是否打开的七种方法的文章就介绍到这了,更多相关Python检查端口是否打开内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!