假设,有一个智障同事,发了一个Excel过来(里面含有多张表格),要求扫描里面所有的IP是否有网卡故障,比如下面这样的
先不说IP数量多少的问题,里面有多张表格,并且有多个列,每一列都有不少IP,IP呢,还有分为172开头的(物理机),和10开头的(Docker),看起来好像复杂死了。
这里说一下我的处理方式。
找一个Excel转换成JSON/TXT的工具(比如这个Excel To Formula View),转换以后的效果如下
把转换的结果(zhukun.net)放到服务器上;
$ sed -i "s/'//" zhukun.net #把单引号先去除了
接着把IP筛选出来,注意这里有一个坑
$ cat zhukun.net | cut -d'=' -f2 | grep ^"10." | wc -l #把10.开头的IP筛选出来,如果有一行是102或者101,那么也会被筛选出来
6863
$ cat zhukun.net | cut -d'=' -f2 | grep ^"10\." | wc -l #把10.开头的IP筛选出来,强制把小数点转义
6860
$ cat zhukun.net | cut -d'=' -f2 | grep ^"10\." > 10 #把10开头的IP(Docker)筛选出来
$ cat zhukun.net | cut -d'=' -f2 | grep ^"172\." > 172 #把172开头的IP(物理机)筛选出来
然后使用批量扫描工具,进行扫描
$ a='ifconfig `ip -o -4 route show to default | cut -d" " -f5` | grep errors'
$ ./batch_op.py -f 10 "$a" > 10.result
$ ./batch_op.py -f 172 "$a" > 172.result
这里解释一下意思
$ ip -o -4 route show to default | cut -d” ” -f5这条命令用于获取网卡的name,例如eth0;
然后使用ifconfig eth0 | grep errors获得网卡的错误信息。
找出网卡有error的机器IP
$ cat 172.result | grep -v errors:0
172.28.147.109|stdout| RX packets:278742828327 errors:6 dropped:10212 overruns:0 frame:6
172.20.107.89|stdout| RX packets:313484511721 errors:15846991 dropped:182934 overruns:0 frame:15846991
172.20.107.81|stdout| RX packets:284364948207 errors:8568 dropped:75902 overruns:0 frame:8568
172.20.113.88|stdout| RX packets:183294536057 errors:2125992 dropped:0 overruns:0 frame:2125992
172.28.147.109|stdout| RX packets:278742838411 errors:6 dropped:10212 overruns:0 frame:6
172.20.107.58|stdout| RX packets:110837908310 errors:3903 dropped:544 overruns:0 frame:3903
172.20.114.189|stdout| RX packets:67440477666 errors:2048592 dropped:0 overruns:0 frame:2048592