正常情况下,对局域网或者外网的某个IP地址段进行扫描,要用到循环以及shell中的一些命令。但是效率不是很理想。我在网上查阅了一些资料后,发现了parallel这个可以实现多线程的命令。
以下代码是对某个IP地址段进行三层发现的代码:
#ayao 2018/03/28
#For searching online IP in WLAN
#!/bin/bash
if [ "$#" -ne 1 ];then
echo "Example: './get-ip.sh 192.168.1.100'"
exit
fi
nic=$1
prefix=$(echo "$nic" | cut -d "." -f 1-3)
seq 1 254 | parallel -P 16 ping -c 1 $prefix.{} | grep "^64 bytes from" | awk '{print $4}' | cut -d ":" -f 1
前面的if语句用来对输入的参数进行简单的校验
然后将第一个参数赋值给nic,prefix以冒号为分隔符截取了nic变量的前三个字符
parallel命令的-P参数规定了线程的数量,{}表示parallel从管道符“|”接收来的参数
后面的一串管道用来从输出中截取IP地址
更多的paralle的详细用法可以参考这篇文章:https://www.jianshu.com/p/c5a2369fa613
文章原创,转载请注明出处
网友评论