在Python中,你可以使用多种方法来ping一个域名。以下是几种常见的方法:
方法一:使用`os.system`
import osip = 'www.baidu.com'backinfo = os.system(f'ping -c 1 -w 1 {ip}') -c 1 表示发送一次 ping,-w 1 表示等待1秒if backinfo == 0:print(f'{ip} 是可达的。')else:print(f'{ip} 是不可达的。')
方法二:使用`subprocess`模块
import subprocessip = 'www.baidu.com'command = ['ping', '-c', '1', ip]response = subprocess.call(command, stdout=subprocess.DEVNULL, stderr=subprocess.STDOUT)if response == 0:print(f'{ip} 是可达的。')else:print(f'无法到达 {ip}。')
方法三:使用第三方库`pythonping`
from pythonping import pingip = 'www.baidu.com'response = ping(ip)if response.success():print(f'{ip} 是可达的,延迟 {response.rtt_avg_ms}ms')else:print(f'无法到达 {ip}。')
方法四:使用第三方库`ping3`
from ping3 import ping, verbose_pingip = 'www.baidu.com'response_time = ping(ip)if response_time is None:print(f'无法Ping通{ip}')else:print(f'Ping {ip} 成功,响应时间:{response_time} 秒')详细Ping测试verbose_ping(ip, count=4)
方法五:使用原始套接字(需要更深入的Python知识)
import osimport structimport selectimport timefrom scapy.all import *def ping_one(dst='36.152.44.95', ttl_no=64, id_no=345, seq_no=5):start_time = time.time()time_to_bytes = struct.pack('>d', start_time)ping_one_result = sr1(IP(dst=dst, ttl=ttl_no)/ICMP(seq=seq_no, id=id_no)/time_to_bytes, timeout=1, verbose=False)if ping_one_result.getlayer('ICMP').type == 0 and ping_one_result.getlayer('ICMP').seq == seq_no:reply_src_IP = ping_one_result.getlayer('IP').srcprint(f'收到来自 {reply_src_IP} 的应答。')else:print('没有收到应答。')
选择适合你需求的方法进行尝试。

