【问题标题】:Increment IP address in a shell script在 shell 脚本中增加 IP 地址
【发布时间】:2015-10-10 16:42:06
【问题描述】:

是否可以以另一种方式编写此脚本来增加 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

【问题讨论】:

    标签: bash shell loops ip


    【解决方案1】:

    这个函数只是打印下一个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"
    }
    

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

    FIRST_IP=192.168.1.250
    NUM=10
    
    IP=$FIRST_IP
    for i in $(seq 1 $NUM); do
        echo $IP
        IP=$(nextip $IP)
    done
    

    样本输出:

    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
    

    【讨论】:

      【解决方案2】:

      看看:

      i1=0; i2=0; i3=0; i4=0
      max=255
      eval printf -v ip "%s\ " {$i1..$max}.{$i2..$max}.{$i3..$max}.{$i4..$max}
      
      for i in $ip; do
        # do here somthing with $i
      done
      

      【讨论】:

      • 有没有办法在文本文件的列中放入 eval 命令的输出?
      • 你的意思是这样的吗? for i in $ip; do echo "$i"; done
      • 是的,但在这种情况下,我们将使用从 while 到 for 的另一种循环方案。 eval 是一个有趣的函数,谢谢,但是我如何逐个操作输出元素?因为你发布的脚本给了我一个完整的输出流。谢谢你的时间赛勒斯
      猜你喜欢
      • 2011-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-22
      • 2018-12-08
      • 2012-06-06
      相关资源
      最近更新 更多