用python实现指定参数的远程主机网络探测

编写一个脚本test_ip.py实现指定参数的远程主机网络探测

python test_ip.py 192.168.0.10 192.168.0.100

针对192.168.0.10~192.168.0.100范围内所有主机进行网络探测

代码实现

import sys        # 导入 sys 模块,用于访问与 Python 解释器相关的变量和函数。
import subprocess #导入 subprocess 模块,用于创建新的进程、连接其输入/输出/错误管道,并获取返回码。

def ping(host):   #定义一个名为 ping 的函数,接受一个参数 host(表示要探测的主机 IP 地址)。
    try:          #开始一个异常处理块。

        output = subprocess.run(['ping', '-c', '1', host], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
                  #执行 ping 命令,发送一个 ICMP Echo Request 数据包到指定的主机。
                  # stdout=subprocess.PIPE 和 stderr=subprocess.PIPE
                  #将标准输出和标准错误重定向到管道,以便稍后读取。
        if output.returncode == 0:
                  #检查 ping 命令的返回码。如果返回码为 0,表示 ping 成功,主机可达。
            return True
    except Exception as e:
                  #捕获所有异常
        print(f"Error pinging {host}: {e}")
                  #打印错误信息,包括哪个主机出错以及具体的错误信息。
    return False

def generate_ip_range(start_ip, end_ip):
    start = list(map(int, start_ip.split('.')))
    #将起始 IP 地址按点分割成四个部分,并将每个部分转换为整数,存储在列表 start 中。
    end = list(map(int, end_ip.split('.')))
    #将结束 IP 地址按点分割成四个部分,并将每个部分转换为整数,存储在列表 end 中。
    temp = start
    #初始化临时变量 temp,将其设置为起始 IP 地址的整数列表。
    ip_range = []
    #初始化空列表 ip_range,用于存储生成的 IP 地址。

    while temp <= end:
        ip_range.append(".".join(map(str, temp)))
        #将当前 temp 列表中的整数转换为字符串,并用点连接成一个 IP 地址字符串,添加到 ip_range 列表中。
        temp[3] += 1
        for i in (3, 2, 1):
            if temp[i] == 256:
                temp[i] = 0
                temp[i - 1] += 1
    return ip_range

def main():
    start_ip = input("输入起始IP地址: ")
    #提示用户输入起始 IP 地址,并将其存储在变量 start_ip 中。
    end_ip = input("输入结束IP地址: ")
    #提示用户输入结束 IP 地址,并将其存储在变量 end_ip 中。
    ip_range = generate_ip_range(start_ip, end_ip)
    #调用 generate_ip_range 函数生成指定范围内的 IP 地址列表,并将其存储在变量 ip_range 中。

    for ip in ip_range:
        #遍历生成的 IP 地址列表。
        is_reachable = ping(ip)
        status = "Reachable" if is_reachable else "Unreachable"
        print(f"{ip}: {status}")

if __name__ == "__main__":
#保只有在直接运行脚本时才执行 main() 函数。如果脚本被作为模块导入,则不会执行 main()。
    main()

使用截图

在这里插入图片描述

运行截图

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值