上一篇文章讲的是批处理循环ping C网段地址,代码实在不友好,这次用python写个循环ping主机代码,大家可以比对下!
批处理的优势就是直接可以在Windows上双击执行,python代码需要Windows安装python环境才能运行。
import osfor i in range(1, 255): ip = f"192.168.0.{i}" response = os.system(f"ping -n 1 {ip}") if response == 0: print(f"{ip} 在线") else: print(f"{ip} 离线")
让我们逐行来拆解一下这段代码:
导入模块:import os 导入os模块,为后续执行 CMD 命令做准备。
for 循环:for i in range(1, 255): 使用for循环遍历从 1 到 254 的数字,因为 IP 地址的最后一位取值范围通常是 1 - 254(0 和 255 有特殊用途)。
生成 IP 地址:ip = f"192.168.0.{i}" 利用 Python 的 f-string 格式化字符串,将循环变量i拼接到固定的网段地址 “192.168.0.” 后面,生成完整的 IP 地址。
执行 ping 命令:response = os.system(f"ping -n 1 {ip}") 使用os.system()函数执行 CMD 命令。这里的ping -n 1 {ip}表示只向目标 IP 发送 1 个 ICMP 回显请求,-n参数在 Windows 系统中用于指定发送的数据包数量,在 Linux 系统中对应的参数是-c,如果在 Linux 下运行代码,需要将命令改为ping -c 1 {ip}。os.system()函数执行命令后会返回一个状态码,0 表示命令执行成功,即目标 IP 可连通,其他值则表示不可连通。
判断结果:通过if-else语句判断response的值,如果为 0,就打印出该 IP 地址在线;否则,打印该 IP 地址离线。
将结果保存到文件中,方便后续查看
import oswith open('ping_result.txt', 'w') as f: for i in range(1, 255): ip = f"192.168.0.{i}" response = os.system(f"ping -n 1 {ip}") if response == 0: result = f"{ip} 在线\n" else: result = f"{ip} 离线\n" f.write(result)