Python脚本多进程ping地址段,获取在线网络设备信息

 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("程序已完成运行。")

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值