You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python检测IP地址的在线/离线连通状态

Python实现服务器IP连通性检测的可行方案

下面是生产环境常用的3种实现方式,均经过实际场景验证,可根据自己的业务场景选型:

方案1:调用系统ping命令(通用首选)

这个方案是最稳妥的无依赖实现,和手动在命令行敲ping的检测逻辑完全一致,自动适配Windows、Linux、macOS系统,不需要特殊运行权限。
核心是通过标准库subprocess调用系统自带的ping工具,通过返回码判断是否连通:

import subprocess
import platform

def check_ip_reachable(ip: str, timeout: int = 2) -> bool:
    sys_type = platform.system().lower()
    # 不同系统ping参数适配:-n是Windows指定包数,-c是类Unix系统指定包数
    count_flag = '-n' if sys_type == 'windows' else '-c'
    # 超时参数适配
    timeout_flag = '-w' if sys_type == 'windows' else '-W'
    # 构造命令:仅发1个探测包,减少等待时间
    cmd = ['ping', count_flag, '1', timeout_flag, str(timeout), ip]
    # 执行命令,屏蔽标准输出和错误输出
    exec_result = subprocess.run(
        cmd,
        stdout=subprocess.DEVNULL,
        stderr=subprocess.DEVNULL
    )
    # 返回码为0代表连通
    return exec_result.returncode == 0
  • 适用场景:常规连通性检测,服务器没有禁ICMP协议的绝大多数场景
  • 优缺点:无任何第三方依赖,兼容性拉满,不需要特殊权限;仅在极端精简的、未预装ping工具的系统上无法使用

方案2:TCP端口探测(适合禁ping场景)

很多服务器出于安全考虑会禁用ICMP协议,直接ping会显示超时,但实际服务是正常运行的,这种场景可以通过探测目标服务器开放的TCP端口判断连通性,用Python自带的socket库就能实现:

import socket

def check_ip_port_reachable(ip: str, open_port: int, timeout: int = 2) -> bool:
    """
    :param open_port: 目标服务器已知开放的TCP端口,比如SSH的22、HTTP的80、HTTPS的443
    """
    conn_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    conn_socket.settimeout(timeout)
    try:
        conn_socket.connect((ip, open_port))
        conn_socket.close()
        return True
    except (socket.timeout, ConnectionRefusedError, OSError):
        return False
  • 适用场景:目标服务器禁ping、且你明确知道该服务器开放的TCP端口的场景
  • 优缺点:纯标准库实现,不受ICMP禁用策略影响,无权限要求;必须提前知道目标开放的端口,否则会出现误判

方案3:第三方ICMP库实现

如果不想依赖系统ping命令,可以用pythonping这个纯Python实现的ICMP库,代码更简洁:
先安装依赖:
pip install pythonping
示例代码:

from pythonping import ping

def check_ip_with_lib(ip: str, timeout: int = 2) -> bool:
    try:
        ping_result = ping(ip, count=1, timeout=timeout)
        return ping_result.success()
    except RuntimeError:
        # Linux/macOS下普通用户没有发ICMP包的权限,会抛出运行时错误
        return False
  • 适用场景:本地开发工具、可以拿到管理员/root权限运行脚本的场景
  • 优缺点:代码简洁,不依赖系统命令;类Unix系统下需要root权限才能运行,生产环境部署需要额外处理权限问题

选型建议

  • 没有特殊限制优先选方案1,稳定无坑,适配绝大多数生产环境
  • 目标服务器禁ping选方案2,准确率最高
  • 本地工具开发、能解决权限问题选方案3,代码维护成本低

内容的提问来源于stack exchange,提问作者Med Op

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 12:16:01