• Python测网络连通性、能否访问某个网络或者端口号<网络检测、ping主机、测试端口>


    一、ping命令及其使用

    ping命令是在计算机网络领域中用来测试目标主机是否可达以及其延迟时间的命令。对于Python来说,我们可以通过subprocess模块来实现执行命令。下面是示例代码:

    import subprocess
    
    def ping(host):
        result = subprocess.run(
            ['ping', '-c', '3', '-W', '5', host],
            capture_output=True,
            encoding='utf8'
        )
        if result.returncode == 0:
            return True, result.stdout
        else:
            return False, result.stderr
    
    reachable, output = ping('www.google.com')
    print(output)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    以上代码将执行ping命令来检测www.google.com是否可达,ping命令将执行3次且等待5秒钟,如果目标主机可达,则函数将返回True和ping命令的输出;否则将返回False和错误信息。

    二、使用urllib和requests检测是否连接到特定站点

    urllib和requests是Python中最受欢迎和使用的HTTP网络请求库之一。我们可以使用这些库来检查是否连接到特定站点。下面是一个简单的使用urllib的示例:

    import urllib.request
    
    def is_internet_available():
        try:
            urllib.request.urlopen('https://www.google.com')
            return True
        except:
            return False
    
    if is_internet_available():
        print('Internet is available!')
    else:
        print('Internet is unavailable!')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    以上代码尝试访问Google网站,如果该网站可访问,则将打印消息。否则将打印不可用消息。

    以下是一个使用requests库的示例,您可能会发现它更加具有可读性:

    import requests
    
    def is_internet_available():
        try:
            requests.get('https://www.google.com')
            return True
        except:
            return False
    
    if is_internet_available():
        print('Internet is available!')
    else:
        print('Internet is unavailable!')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    与上面的代码示例类似,此代码尝试访问Google网站。如果该站点可用,则将打印消息。否则将打印不可用消息。

    三、使用socket库测试TCP/UDP端口的可用性

    socket库允许我们使用TCP或UDP协议在本地或远程计算机上的特定端口测试可用性。我们可以使用如下示例代码:

    import socket
    
    def is_port_open(ip_address, port):
        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        result = sock.connect_ex((ip_address, port))
        if result == 0:
            return True
        else:
            return False
    
    if is_port_open('127.0.0.1', 80):
        print('Port 80 is open!')
    else:
        print('Port 80 is closed!')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    以上代码使用socket库测试本地计算机上的端口80。如果端口开放,则将打印Port 80 is open!;否则,将打印Port 80 is closed!。

    同样,我们可以使用该库来测试TCP和UDP协议的远程端口的可用性。

    四、使用ping3库实现更多ping功能

    如果要在Python中执行更加高级的ping命令,您可以使用ping3库。ping3库提供了许多高级功能,如单个数据包的ping、发现局域网内的主机等。以下是示例代码:

    import ping3
    
    # Ping a host
    response_time = ping3.ping('127.0.0.1')
    print(response_time)
    
    # Ping a host with a custom timeout
    response_time = ping3.ping('127.0.0.1', timeout=2)
    print(response_time)
    
    # Scan a local network for hosts that respond to ping
    hosts = ping3.ping_scan('192.168.1.1/24')
    print(hosts)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    以上示例演示了如何使用ping3库来执行ping命令、设定自定义超时时间以及扫描局域网内的主机。

    五、使用multiping库同时ping多个主机

    如果你需要在Python中同时ping多个主机,可以使用multiping库。这个库使用了多线程来加快ping的速度。以下是示例代码:

    import multiping
    
    # Ping multiple hosts
    hosts = ['127.0.0.1', 'google.com', 'bing.com']
    results = multiping.multi_ping(hosts)
    
    for addr, rtt in results.items():
        if rtt is None:
            print('%s timeout' % addr)
        else:
            print('%s responded in %d ms' % (addr, rtt))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    以上代码将同时ping多个主机,并输出结果。

  • 相关阅读:
    MAVEN的安装与配置
    概率论期末复习
    云智研发公司面试真题
    内置升压的单声道D类音频功率放大器:HT81293
    利星行汽车携手南凌科技 拥抱网络数字化变革
    微星如何于BIOS中开启/关闭AMD虚拟化技术
    深度学习环境搭建【显卡算力、CUDA、pytorch、tensorflow选择】
    Dubbo+Zookeeper的简单使用---实现RPC远程调用
    MySQL大表优化方案
    最新版nacos 2.2.3服务注册与发现版本依赖问题
  • 原文地址:https://blog.csdn.net/weixin_39589455/article/details/133806194