首页 > 解决方案 > 使用 Python 在未经授权的主机上难以实现 ping/延迟功能

问题描述

我制作了一个 web 应用程序(python/django),它 ping 不同的服务器并返回 ping 值。这是链接

它有一个 pingserver(ip,sev) 函数,该函数使用 os/system fping(可以与 /bin/ping 一起使用)来获取输出并通过条带获取值。

def pingserver(ip,sev):
    ping_response = subprocess.Popen(["/usr/bin/fping","-c1","-t400",ip], stdout=subprocess.PIPE).stdout.read()
    latency = str(ping_response)
    ping_value=latency.split('ms')[0].split(',')[-1]
    if len(ping_value) <= 3:
        return(sev,'unknown')
    else:
        return(sev,ping_value)

它在我的本地服务器中运行良好,但代码在托管机器中无法运行,因为“/bin/fping”没有退出。我不能做以下事情:

  1. 安装 fping 或 ping(我在服务器上没有 root 权限)

  2. 不能使用 pyping(需要 root 才能创建原始套接字)

  3. 不能使用 ping/fping 可执行文件(需要 root 权限)

  4. 不能使用 http.connnection.request 或类似的(我需要准确的 ping 值;不是关于服务器启动或关闭的信息)

所以我的问题是如何在这些情况下获得 ping/延迟,以便我的代码正常工作。(任何与代码重写或库使用相关的建议表示赞赏)

标签: pythondjangolinuxpythonanywhere

解决方案


似乎 ping 存在与之相关的潜在安全问题,因此 PythonAnywhere 不允许您运行它。但是你可以弹出类似的东西

time nc -zw400 <host> <port>

(对命令使用 bash shell time)获取延迟统计信息


推荐阅读