在没有 root 权限的情况下 Ping Python 中的服务器

Ping server in Python without root permissions

我有一个 python 脚本,它只有在我的服务器可用时才能运行。所以在脚本开始之前,我想 ping 我的服务器或者检查服务器的可用性。

已经有一些相关的 SO 问题。 例如

  1. pyping module

    response = pyping.ping('Your IP')
    if response.ret_code == 0:
       print("reachable")
    else:
        print("unreachable")
    
  2. ping process in python

    response = os.system("ping -c 1 " + hostname)
    

这些答案很有效,但仅限于 ROOT 用户! 当我以普通用户身份使用此解决方案时,出现以下错误消息:

ping: Lacking privilege for raw socket.

我需要一个解决方案,我可以作为普通用户执行此操作,因为我在 jenkins 作业中 运行 这个脚本,并且没有 运行 作为 root 的选项。

假设机器有一个 http 服务器 运行,尝试执行 HTTP HEAD 请求是否足够?

from http.client import HTTPConnection # python3

try:
    conn = HTTPConnection(host, port, timeout)
    conn.request("HEAD", "/")
    conn.close()

    # server must be up
except:
    # server is not up, do other stuff