import subprocess
import ipaddress
import sys
def ping_host(host):
"""
对指定主机进行 Ping 操作
参数:
host (str):要 Ping 的主机 IP 地址
返回:
bool:如果主机可达,返回 True;否则返回 False
"""
command = ["ping", "-c", "1", host]
try:
subprocess.check_output(command, stderr=subprocess.STDOUT)
return True
except subprocess.CalledProcessError:
return False
if __name__ == "__main__":
# 获取命令行参数
args = sys.argv[1:]
if not args:
print("请提供要探测的 IP 地址范围或单个 IP 地址。")
sys.exit(1)
# 处理单个 IP 地址
if len(args) == 1:
ip = args[0]
if ipaddress.ip_address(ip).is_private:
if ping_host(ip):
print(f"{ip} 可达")
else:
print(f"{ip} 不可达")
else:
print("请提供私有 IP 地址范围或单个私有 IP 地址。")
sys.exit(1)
# 处理 IP 地址范围
elif len(args) == 2:
start_ip = args[0]
end_ip = args[1]
if ipaddress.ip_address(start_ip).is_private and ipaddress.ip_address(end_ip).is_private:
start = ipaddress.ip_address(start_ip)
end = ipaddress.ip_address(end_ip)
for ip in range(int(start), int(end) + 1):
host = str(ipaddress.ip_address(ip))
if ping_host(host):
print(f"{host} 可达")
else:
print(f"{host} 不可达")
else:
print("请提供私有 IP 地址范围。")
sys.exit(1)
else:
print("参数数量不正确。")
sys.exit(1)
