admin管理员组

文章数量:1613758

ping命令是在win和linux中常用的命令。

  可是使用ping命令实现对ip连通性的测试。例如:

  • _
    import subprocess as sp
    def check_connection(ip):
        cmd = f'ping -c 1 {ip}'
        output = sp.getoutput(cmd)
        return False if '100% packet loss' in output else True
    

  这个函数中,对IP进行了一次PING测试,如果ping通,返回True,否则返回False

  在实际的使用中发现,如果IPping不通时,直到ping命令的超时,才有结果返回。在某些响应中,ping命令的超时,会成为影响程序效率的关键。

  通过查询帮助文档,在linux中和win中ping命令参数是有差异的,如下所示:

  • linux

    >>ping -h
    选项 -h 不正确。
    
    用法: ping [-t] [-a] [-n count] [-l size] [-f] [-i TTL] [-v TOS]
                [-r count] [-s count] [[-j host-list] | [-k host-list]]
                [-w timeout] [-R] [-S srcaddr] [-c compartment] [-p]
                [-4] [-6] target_name
    
    选项:
        -t             Ping 指定的主机,直到停止。
                       若要查看统计信息并继续操作,请键入 Ctrl+Break;
                       若要停止,请键入 Ctrl+C。
        -a             将地址解析为主机名。
        -n count       要发送的回显请求数。
        -l size        发送缓冲区大小。
        -f             在数据包中设置“不分段”标记(仅适用于 IPv4)-i TTL         生存时间。
        -v TOS         服务类型(仅适用于 IPv4。该设置已被弃用,
                       对 IP 标头中的服务类型字段没有任何
                       影响)-r count       记录计数跃点的路由(仅适用于 IPv4)-s count       计数跃点的时间戳(仅适用于 IPv4)-j host-list   与主机列表一起使用的松散源路由(仅适用于 IPv4)-k host-list    与主机列表一起使用的严格源路由(仅适用于 IPv4)-w timeout     等待每次回复的超时时间(毫秒)-R             同样使用路由标头测试反向路由(仅适用于 IPv6)。
                       根据 RFC 5095,已弃用此路由标头。
                       如果使用此标头,某些系统可能丢弃
                       回显请求。
        -S srcaddr     要使用的源地址。
        -c compartment 路由隔离舱标识符。
        -p             Ping Hyper-V 网络虚拟化提供程序地址。
        -4             强制使用 IPv4。
        -6             强制使用 IPv6。
    
  • win

    (venv3) [root@localhost operational_system_api]# ping -h
    Usage: ping [-aAbBdDfhLnOqrRUvV64] [-c count] [-i interval] [-I interface]
                [-m mark] [-M pmtudisc_option] [-l preload] [-p pattern] [-Q tos]
                [-s packetsize] [-S sndbuf] [-t ttl] [-T timestamp_option]
                [-w deadline] [-W timeout] [hop1 ...] destination
    Usage: ping -6 [-aAbBdDfhLnOqrRUvV] [-c count] [-i interval] [-I interface]
                 [-l preload] [-m mark] [-M pmtudisc_option]
                 [-N nodeinfo_option] [-p pattern] [-Q tclass] [-s packetsize]
                 [-S sndbuf] [-t ttl] [-T timestamp_option] [-w deadline]
                 [-W timeout] destination
    

  修改后代码:

  • _
    import subprocess as sp
    
    def check_connection(ip):
        if sys.platform == 'linux':
            cmd = f'ping -W 3 -c 1 {ip}'
        else:
            cmd = f'ping -w 3000 -n 1 {ip}'
        output = sp.getoutput(cmd)
    	return False if '100% packet loss' in output or '100% 丢失' in output else True
    

注:

  win中的延迟参数为-w,单位为毫秒;发送的回显请求数参数为-n
  linux中的延迟参数为-W,单位为秒;发送的回显请求数参数为-c

本文标签: 区别pingLinuxwin