Python批量pingIP地址

Python批量pingIP地址

ping一批IP地址,读取第一条响应报文,网络可达则显示up,否则显示down。

import subprocess
import platform
import sys

def ping(ip, param):
    # ping 1次
    command = ['ping', param, '1', ip]
    # 执行命令,成功则返回True,否则返回False
    result = subprocess.run(command, capture_output=True, text=True)
    # 执行结果中包含ttl则表示ping通
    return 'ttl' in result.stdout.lower() + result.stderr.lower()

def start():
    # 检查输入的参数个数是否=2(本身程序名加上IP列表),否则提示错误,并退出程序
    if len(sys.argv) != 2:
        print('Usage: python check_ping.py <ip_path>')
        sys.exit(1)

    # 第一个参数,IP地址列表文件
    ip_path = sys.argv[1]

    # 打开ip地址列表,如果文件不存在则抛出异常,并退出程序
    try:
        with open(ip_path, 'r') as ip_list:
            # 读取所有行,放到列表里
            ips = ip_list.readlines()
    except FileNotFoundError:
        print('Error: The file ' + ip_path + ' was not found.')
        sys.exit(2)

    # 根据操作系统类型选择命令参数
    param = '-n' if platform.system().lower() == 'windows' else '-c'

    # 统计计数
    count = 0
    up = 0
    down = 0

    for ip in ips:
        # ip不为空
        if ip:
            count += 1
            # 去掉末尾换行符或空格
            ip = ip.strip()
            # 调用ping
            result = ping(ip, param)
            # 根据返回值输出结果并计数
            if result:
                up += 1
                print(f'{ip} is up')
            else:
                down += 1
                print(f'{ip} is down')

    # 输出统计值
    print(f'\ncount = {count}, up = {up}, down = {down}\n')

if __name__ == '__main__':
    start()

P.S.运行的时候输入IP地址列表文件路径作为参数。

Best regards, yunxi p deng 2024.10.07

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值