1、如地址很多,该脚本运行的时候时间较长,过程中不会有任何提示,等待结束提示即可
2、代码全部运行后,会生产两个txt文档,一个是能ping通的,一个是不能ping通的
3、如果网段的网关设计为.254,可根据实际情况进行筛选,也有可能有.255的地址
import ping3
import ipaddress
import concurrent.futures
from datetime import datetime
def ping_ip(ip):
if ping3.ping(str(ip), timeout=0.5):
return ip, True
else:
return ip, False
def process_network(ip_network_str):
try:
network = ipaddress.ip_network(ip_network_str, strict=False)
return list(network.hosts()) if isinstance(network, ipaddress.IPv4Network) or isinstance(network, ipaddress.IPv6Network) else [network]
except ValueError:
return [ipaddress.ip_address(ip_network_str)]
def main():
now = datetime.now().strftime("%Y%m%d_%H%M%S")
success_filename = f"ping_successes_{now}.txt"
fail_filename = f"ping_failures_{now}.txt"
with open(success_filename, "w") as success_file, open(fail_filename, "w") as fail_file:
with open("ip_ranges.txt", "r") as ip_ranges_file:
ip_list = [line.strip() for line in ip_ranges_file]
with concurrent.futures.ThreadPoolExecutor(max_workers=10) as executor:
results = executor.map(ping_ip, ip_list)
for ip, success in results:
if success:
success_file.write(f"{ip}\n")
else:
fail_file.write(f"{ip}\n")
print(f"Ping scan complete. Successful pings written to {success_filename}. Failures written to {fail_filename}")
if __name__ == "__main__":
main()
print("程序已完成运行。")