在外壳程序脚本中增加IP地址

Luc*_*ano 1 ip bash shell loops

可以用其他方式编写此脚本来增加ip地址中断循环吗?脚本(端口扫描程序)可以正常工作,而我的问题只是效率方面的问题。对不起,我的英语,谢谢您的回答。

#!/bin/bash
ip=$1
IFS=. read i1 i2 i3 i4 <<< "$ip"  
port=$2
max=255

   while [ $i1 -le $max ];do
       while [ $i2 -le $max ]; do 
            while [ $i3 -le $max ]; do
                  while [ $i4 -le $max ]; do
                     timeout 0.4 bash -c "echo >/dev/tcp/$i1.$i2.$i3.$i4/$port" && echo "on $i1.$i2.$i3.$i4  port $port is open" 
                      i4=$(($i4+1)) 
                  done
            i4=0
            i3=$(($i3+1))
            done
       i3=0
       i2=$(($i2+1))
       done
   i2=0
   i1=$(($i1+1))
   done
Run Code Online (Sandbox Code Playgroud)

kva*_*aps 7

此功能仅打印下一个ip:

nextip(){
    IP=$1
    IP_HEX=$(printf '%.2X%.2X%.2X%.2X\n' `echo $IP | sed -e 's/\./ /g'`)
    NEXT_IP_HEX=$(printf %.8X `echo $(( 0x$IP_HEX + 1 ))`)
    NEXT_IP=$(printf '%d.%d.%d.%d\n' `echo $NEXT_IP_HEX | sed -r 's/(..)/0x\1 /g'`)
    echo "$NEXT_IP"
}
Run Code Online (Sandbox Code Playgroud)

所以你可以像这样增加它:

FIRST_IP=192.168.1.250
NUM=10

IP=$FIRST_IP
for i in $(seq 1 $NUM); do
    echo $IP
    IP=$(nextip $IP)
done
Run Code Online (Sandbox Code Playgroud)

样本输出:

192.168.1.250
192.168.1.251
192.168.1.252
192.168.1.253
192.168.1.254
192.168.1.255
192.168.2.0
192.168.2.1
192.168.2.2
192.168.2.3
Run Code Online (Sandbox Code Playgroud)