如何在 Python 3.10 中 ping Web 服务器

How to ping a web server in Python 3.10

好的,是时候问一个非常 stupid/obvious 的问题了。我需要使用 ICMP 协议 ping webserver/website 以查看它是否有效。你知道...ping facebook.com。我的代码生成了一堆 TLD 和子域到用户输入的域名。我计划在执行我需要对它们执行的操作之前对它们全部执行 ping 操作(通常大约为 6 个)以查看它们是否真的有效。但是,所有与我类似的教程和问题都来自 2010 年,不再有效。我必须做的一件事是打印出我不想要的 ping 结果。所以也许像下面这样的某种功能,它只是 returns 或打印出它是否在线而不是实际响应,如果这有意义的话:

def website_checker():
     
     if os.system("ping facebook.com"):
           
          print("facebook.com is valid")
     
     else:
    
          print("facebook.com is not valid")

我不确定这是否有帮助,但我无法用更好的词来表达。拜托,我正在拔头发

您可以使用 ping 库进行 ping。

import ping, socket
try:
    ping.verbose_ping('www.google.com', count=3)
    delay = ping.Ping('www.wikipedia.org', timeout=2000).do()
except socket.error, e:
    print "Ping Error:", e

您可以使用 icmplib。如果 DNS 查找成功并且主机响应所有 ping,以下代码将尝试 ping host 和 returns True

from icmplib import ping

from icmplib import ping
from icmplib.exceptions import NameLookupError


def host_up(hostname:str):
    try:
        host = ping(hostname, count=5, interval=0.2)
    except NameLookupError:
        return False
    return host.packets_sent == host.packets_received

host = "facebook.com"
if host_up(host):
    print(f"{host} is valid")
else:
    print(f"{host} is not valid")

感谢@Moanos 的帮助,我弄明白了!这是代码:

from icmplib import ping

def host_up(hostname:str):
    host = ping(hostname, count=5, interval=0.2)
    return host.packets_sent == host.packets_received

hosts = "facebook.gov"

try:
    if host_up(hosts):
        print(f"{hosts} is valid")
except:
    print(f"{hosts} is not valid")

所以函数是@Moanos 的代码,其余的是我的。我使用 try, except 块的原因是为了防止打印出 NameLookupError!所以当它有效时,它只表示它是有效的,当它不是有效域时也是如此。