ping在linux和win中的区别

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

### 如何从 Windows 系统 PingLinux 的特定端口 在标准情况下,`ping` 命令仅用于测试 ICMP 协议的连通性,并不支持直接针对某个端口进行探测。如果需要验证 Linux 系统上的特定端口是否开放以及服务是否正常运行,则可以采用其他工具或方法来实现这一目标。 #### 方法一:使用 `telnet` 测试端口连通性 可以通过 `telnet` 工具来检测指定端口的服务状态。例如,在 Windows 上打开命令提示符并执行如下命令: ```bash telnet <Linux_IP> <Port> ``` 其中 `<Linux_IP>` 是 Linux 主机的 IP 地址,而 `<Port>` 则是要测试的具体端口号。如果连接成功则表示该端口处于监听状态并且可访问[^5]。 #### 方法二:利用 PowerShell 中的 Test-NetConnection cmdlet 对于现代版本的 Windows (Win8/Server2012及以上),推荐使用内置的PowerShell脚本来完成这项工作。下面给出了一段简单的示例代码用来检查远程SSH(默认为22号端口)是否可用: ```powershell Test-NetConnection -ComputerName 192.168.1.140 -Port 22 ``` 此命令会返回详细的诊断信息,包括能否建立TCP连接等重要数据。 #### 方法三:通过第三方软件如 nmap 执行扫描操作 NMAP(Network Mapper)是一款功能强大的网络安全审计程序,它可以快速发现网络中的存活主机及其开启的各种服务。以下是基本用法说明: ```bash nmap -p<target_port> <linux_ip_address> ``` 替换掉占位符部分即可开始扫描过程。 需要注意的是,在实际部署环境中可能还会遇到诸如防火墙策略等因素的影响,因此建议按照实际情况调整配置文件以允许必要的入站流量进入系统内部[^2]。 最后提醒一点,上述提到的所有技术手段都应当遵循当地法律法规以及所属机构的安全政策规定下合理运用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值