【问题标题】:Ping server in Python without root permissions没有root权限的Python Ping服务器
【发布时间】:2017-04-06 08:45:04
【问题描述】:

我有一个 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 身份运行的选项。

【问题讨论】:

  • 必须是 ping 吗?那么 HTTP GET 或简单的 UDP 数据包呢?
  • 嗯,我没想到。我想到的第一件事是ping,因此我正在尝试用ping解决它。它简短而简单。但如果有任何其他解决方案,您可以将其写为下面的答案。
  • 您为什么要检查可用性?在尝试使用在已知端口上运行的某些服务之前,您是否尝试进行快速检查?如果是,我宁愿尝试连接到该服务,而不是先尝试 ping 它,然后再连接到“真实”服务。
  • @SanjayT.Sharma 不,我检查可用性,因为我想知道服务器是启动还是关闭。我没有使用它的任何服务。

标签: python python-2.7 jenkins server ping


【解决方案1】:

假设机器有一个 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-10
    • 1970-01-01
    • 1970-01-01
    • 2020-05-15
    • 1970-01-01
    • 2017-09-10
    • 2013-08-27
    相关资源
    最近更新 更多