Python检查端口是否打开的七种方法总结

 更新时间:2023年12月12日 09:47:56   作者:小龙在山东  
在信息安全领域,端口扫描是一项常见的技术,用于逐个检测目标主机上的端口是否开放,这篇文章主要给大家介绍了关于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检查端口是否打开内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python实现的网页截图功能【PyQt4与selenium组件】

    Python实现的网页截图功能【PyQt4与selenium组件】

    这篇文章主要介绍了Python实现的网页截图功能,结合实例形式分别描述了使用PyQt4组件与selenium组件进行网页截图操作的相关实现技巧与注意事项,需要的朋友可以参考下
    2018-07-07
  • Python运算符 //、/、%使用与区别详解

    Python运算符 //、/、%使用与区别详解

    Python是一种功能强大的编程语言,提供了各种运算符来执行各种操作,运算符是用于执行特定操作的符号或特殊字符,//(整除)、/(除法)和%(取模)是三种常用的算术运算符,本文将深入解析这三种运算符的区别、使用方法和实际应用场景,需要的朋友可以参考下
    2025-05-05
  • 如何利用Anaconda配置简单的Python环境

    如何利用Anaconda配置简单的Python环境

    这篇文章主要为大家详细介绍了如何利用Anaconda配置简单的Python环境,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-06-06
  • Series和DataFrame使用简单入门

    Series和DataFrame使用简单入门

    这篇文章主要介绍了Series和DataFrame使用简单入门,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-11-11
  • Python多进程加锁的实现

    Python多进程加锁的实现

    很多时候,我们需要在多个进程中同时写一个文件,如果不加锁机制,就会导致写文件错乱,本文主要介绍了Python多进程加锁的实现,文中通过示例代码介绍的非常详细,感兴趣的可以了解一下
    2023-07-07
  • Python的NLTK模块详细介绍与实战案例

    Python的NLTK模块详细介绍与实战案例

    自然语言处理库NLTK在Python中的应用广泛,提供了分词、词性标注、句法分析等多种功能,本文介绍了NLTK的核心功能、基本概念以及通过具体实战案例(如文本分词、去除停用词、词干提取等)展示了其在NLP任务中的实际应用
    2024-09-09
  • python中asyncio处理异步IO的实现示例

    python中asyncio处理异步IO的实现示例

    本文主要介绍python中asyncio处理异步IO的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-11-11
  • vscode pycharm配置miniconda环境全过程

    vscode pycharm配置miniconda环境全过程

    本文介绍了在Mac上通过Homebrew安装Miniconda并配置VSCode和PyCharm环境的方法,包括删除环境、配置Python插件和选择解释器等步骤
    2025-10-10
  • python多线程threading.Lock锁用法实例

    python多线程threading.Lock锁用法实例

    这篇文章主要介绍了python多线程threading.Lock锁用法,以实例形式对python锁的用法进行了较为详细的分析,需要的朋友可以参考下
    2014-11-11
  • python reshape和transpose的区别小结

    python reshape和transpose的区别小结

    reshape() 和 transpose() 是用于改变数组或张量形状的两种不同方法,本文主要介绍了python reshape和transpose的区别小结,具有一定参考价值,感兴趣的可以了解一下
    2024-02-02

最新评论