如何在 Python 3.10 中 ping Web 服务器

问题描述 投票:0回答:3

好吧,是时候问一个非常愚蠢/明显的问题了。我需要使用 ICMP 协议 ping 网络服务器/网站以查看其是否有效。你知道...

ping facebook.com
。我的代码生成一堆 TLD 和用户输入域名的子域。我计划对所有这些(通常约为 6 个)进行 ping 操作,看看它们是否确实有效,然后再对它们进行我需要做的事情。然而,所有与我类似的教程和问题都是 2010 年的,现在已经不起作用了。我要做的一件事就是打印出 ping 的结果,这是我不想要的。所以也许像下面这样的某种函数,它只是返回或打印出它是否在线而不是实际响应(如果有意义的话):

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

我不确定这是否有帮助,但我无法用更好的语言来表达。拜托,我要拔头发了

python operating-system ping icmp
3个回答
1
投票

感谢@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!因此,当它有效时,它仅表示它是有效的,并且当它不是有效域时情况相同。


0
投票

您可以使用 ping lib 来进行 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

0
投票

您可以使用icmplib。以下代码尝试 ping

host
,如果 DNS 查找成功并且主机响应所有 ping,则返回
True

from icmplib import ping
from icmplib.exceptions import NameLookupError


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


visit = "facebook.com"
if host_up(visit):
    print(f"{visit} is valid")
else:
    print(f"{visit} is not valid")
© www.soinside.com 2019 - 2024. All rights reserved.