使用方法,bash filename.sh 192.168.1.1
涉及3个垃圾函数:
- 1、判断ip并取出前三位和点(百度获得)。
- 2、执行ping命令并把成功的结果保存至目录。
- 3、从目录中取得ip执行扫描。
#!/bin/bash
#1.判断正确IP啊,并输出前三位.
is_valid_ip(){
local ip=$1
local valid_ip_regex='^([0-9]{1,3}\.){3}[0-9]{1,3}$'
local ip3
#=~ 匹配正则
if [[ $ip =~ $valid_ip_regex ]];then
#分隔符. 获取一个变量数组varlist
IFS='.' read -r -a varlist <<<"$ip"
for l in "${varlist[@]}";do
if ((l > 255));then
echo "输入错误,请输入一个真确的ip地址:错误$l"
exit 1
fi
#获取前三位.
ip3="${varlist[0]}.${varlist[1]}.${varlist[2]}."
done
echo $ip3
else
echo "参数错误,请输入一个正确的ip地址:"
fi
}
#2.循环ping,并把成功的ip输出到一个文件
pinga(){
Dir_file="./pingtest.txt"
#写空
>$Dir_file
local ip=$1
for i in `seq 254`;do
{
ping -c 1 -s 1 ${ip}${i} &>/dev/null
if [ $? -eq 0 ];then
echo "$ip$i" >>$Dir_file
fi
}&
done
wait
}
#3.根据获取到的列表文件批量扫描
scaned(){
startport=1
endport=80
while IFS= read -r -a ip
do
for port in `seq $startport $endport`;do
{
#echo "$ip $port"
if nc -zv $ip $port >/dev/null 2>&1; then
echo "$ip:$port is open"
fi
}&
done
wait
done < "$Dir_file"
}
#is_valid_ip $1
ips=`is_valid_ip $1`
pinga $ips
#Dir_file="./pingtest.txt"
#echo $Dir_file
scaned
都是百度的ca