在管理某一个局域网的时候,有时候需要检测这个局域网内有哪些主机是活动的(之前遇到过这样的场景,办公室电脑IP之前都是手动配置,DHCP也不用,以前么又啥都没记录,很混乱,买了新办公电脑都不知道给配哪个地址,就怕会地址冲突,所以就希望能有个仍在活动的主机IP清单,这样可以整理下,不过如果电脑关机了的话就会有问题了。。。。)所以这种场景就可以使用脚本实现,脚本的话会更加的灵活一点。
脚本举例如下:
#!/bin/bash suffix=`date +%Y%m%d` cp alivehost.txt alivehostbak${suffix} > alivehost.txt for ip in 10.146.14.{1..255} do ( ping $ip -c 2 &> /dev/null if [ $? -eq 0 ] then echo "$ip is alive" |tee -a alivehost.txt fi )& done wait sort -n -t. -k 4 alivehost.txt -o alivehost.txt
同理可得,可以实现对某台主机端口的检测。这里可以使用nc命令实现。
#!/bin/bash for port in {10000..65535} ; do ( nc -z -v -w1 159.1.1.17 $port &> /dev/null if [ $? -eq 0 ] then echo "$port is open" fi )& done wait
同样使用并行的方式,避免一个个端口检测——那样会很慢。
以上方式会有一个小问题。如果IP地址段比较大或者端口范围比较大的话,脚本并行操作会带来瞬时主机负载上升。如果是生产上的话,可能会被监控系统监测到引起误报,所以这个就在办公室的服务器上或者无关紧要的服务器上玩玩就好了。
Cloudhu 个人随笔|built by django|
沪ICP备16019452号-1