以前笔者写过一篇文章-Shell和Python实现网络ping功能 ,使用Shell和Python两个方式来实现ping网络中的主机。今天笔者看到一个bat批处理脚本在批量查看同一子网络下的所有IP在线情况,算是在windows下另一个解决方法吧,虽然笔者觉得python灵活度更高。
核心的功能还是ping命令了,通过发送数据包并接收应答信息来检测两台计算机之间的网络是否连通。脚本托管在windows_bat/LAN_PING.bat at main · laufei90/windows_bat (github.com) .
for /f "delims=: tokens=2" %%i in ('ipconfig /all ^| findstr /i "IPv4 地址"') do set IP=%%i
ipconfig /all 查看详细的网络配置,找到IPv4 地址字符串的这一行,然后以冒号为间隔(delims=:),查找第2个字串(tokens=2)。但是如果有多个网卡的话,就没法区分了,而ipconfig 不像linux平台的ifconfig命令可以指定特定的网卡。笔者修改了这个,直接指定自己的IP地址 : set IP=192.168.31.40 来指定局域网。
ping %IP1%.%IP2%.%IP3%.%IP4% -n 1 -w 200 -l 16 则是 ping 一次[-n 1],等待200毫秒后按超时考虑[-w 200],发送16字节的数据[-l 16]。ping不断重复,直到IP4增加到256为止。整个脚本目前只能识别子网掩码为255.255.255.0网段的256个主机,没有复杂到识别子网掩码。笔者发现用批处理来计算子网ip地址有点复杂,还是python简洁,直接IPy模块ips=IP("192.168.1.0/25") 搞定。
颇有意思的是,今天接触到bat的退格符 ,可以实现能删除掉当前行中以显示新的内容。关于怎么输入退格符笔者研究了好一会读者可以自行搜索一番或者直接复制我脚本中的退格符。
最后生成总结报告 。
2021年10月16日,笔者以前使用python完成ping功能,可以使用python灵活的完成整个查看在线IPs功能。得益于IPy这个强大的Python第三方库来解析IP地址段,很方便的计算子网所有IP地址。整个代码如下,此为windows下使用,如果要在linux平台的话,ping的参数是不一样的,需要修改。
运行结果报告如下:
关于ping方法,python可以调用外部命令ping,也可以调用python模块来实现(如pythonping等),也可以Python构造ICMP协议实现网络ping方法。
网友评论