在Python中,你可以使用多种方法来ping一个域名。以下是几种常见的方法:
方法一:使用`os.system`
import os
ip = '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 subprocess
ip = '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 ping
ip = '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_ping
ip = '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 os
import struct
import select
import time
from 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').src
print(f'收到来自 {reply_src_IP} 的应答。')
else:
print('没有收到应答。')
选择适合你需求的方法进行尝试。