多线程扫描的shell实现

正常情况下,对局域网或者外网的某个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


文章原创,转载请注明出处

你可能感兴趣的:(多线程扫描的shell实现)