如何将A段、B段、C段网段IP按行输出为详细IP地址

前言

最近无论是配合扫描器,还是一些防护引擎规则,都需要按行导入IP地址,这时,我们的A段、B段、C段网段IP就需要进行一定的转换了。

解决方案

相关代码

这里使用shell脚本来完成上述需求,创建pig_ip.sh文件

IPA1=`echo $1 | awk -F '.' '{print $1}'` 
IPA2=`echo $1 | awk -F '.' '{print $2}'`          
IPA3=`echo $1 | awk -F '.' '{print $3}'`          
IPA4=`echo $1 | awk -F '.' '{print $4}'`          
                                                  
IPB1=`echo $2 | awk -F '.' '{print $1}'`          
IPB2=`echo $2 | awk -F '.' '{print $2}'`          
IPB3=`echo $2 | awk -F '.' '{print $3}'`          
IPB4=`echo $2 | awk -F '.' '{print $4}'`          

IP4_not_equal(){
    for i in `eval echo {$IPA4..$IPB4}`
    do
        echo $IPA1.$IPA2.$IPA3.$i
    done
}



IP3_not_equal () {
    for i in  `eval echo {$IPA3..$IPB3}`
    do
        if [[ $i = $IPA3 ]]
        then
            eval echo   "192.168.$i.{$IPA4..255}" |xargs -n 1
        elif [[ $i = $IPB3 ]]
        then
            eval echo   "192.168.$i.{1..$IPB4}" |xargs -n 1
        else
            eval echo  "192.168.$i.{1..255}" | xargs -n 1
        fi
done
}


IP2_not_equal(){
    #第二段的变化范围
    for n in `eval echo {$IPA2..$IPB2}`
    do
        #如果第二段与IPA的第二段相同
        if [ $n = $IPA2 ] 
        then  
            #第三段的变化范围为IPA3到255 
            for m in `eval echo {$IPA3..255}`
            do
                #如果第三段与IPA的第三段相同
                if [[ $m = $IPA3 ]]
                then
                    eval echo "$IPA1.$IPA2.$IPA3.{$IPA4..255}" | xargs -n 1
                else
                    eval echo "$IPA1.$IPA2.$m.{1..255}" | xargs -n 1
                fi
            done
        #如果第三段与IPB的第三段相同
        elif [ $n = $IPB2 ]
        then
            #第三段变化范围为0到IPB3
            for x in `eval echo {0..$IPB3}` 
            do
                #如果第三段与IPB的第三段相同
                if [ $x = $IPB3  ]
                then
                    eval echo "$IPB1.$IPB2.$IPB3.{0..$IPB4}" |xargs -n 1
                else
                    eval echo "$IPB1.$IPB2.$x.{0..255}" |xargs -n 1
                fi
            done
        #如果第二段与IPA和IPB的均不相同
        else  
            #第三段变化范围
            for y in {0..255}
            do 
                echo $IPA1.$n.$y.{0..255} |xargs -n 1
            done
        fi
    done 
}

#定义pass函数,啥事都不做
pass(){
echo "">/dev/null
}


IP1_not_equal(){
#IP第一段的范围
for d1 in `eval echo {$IPA1..$IPB1}`
do
    #<1>如果第一段与IPA1相同
    if [[ $d1 = $IPA1 ]]
    then
        #第二段IP范围为IPA2到255
        for d2 in `eval echo {$IPA2..255}`
        do
           #<1.1>如果第二段与IPA2相同
           if [[ $d2 = $IPA2 ]]
           then
               #第三段IP范围为IPA3到255
               for d3 in `eval echo {$IPA3..255}`
               do
                   #<1.1.1>如果第三段IP与IPA3相同
                   if [[ $d3 = $IPA3  ]]
                   then
                       for d4 in `eval echo {$IPA4..255}`
                       do
                           echo $d1.$d2.$d3.$d4
                       done
                   #<1.1.2>如果第三段IP与IP3不同
                   else
                       for d4 in {0..255}
                       do
                           echo $d1.$d2.$d3.$d4
                       done
                   fi
               done
           #<1.2>如果第二段与IPA2不同
           else
               for d3 in {0..255}
               do
                   for d4 in {0..255}
                   do
                       echo $d1.$d2.$d3.$d4
                   done
               done
           fi  
        done
    #<2>如果第一段IP与IPB相同
    elif [[ $d1 = $IPB1 ]]
    then
        #第二段IP的范围为0到IPB2
        for d2 in `eval echo {0..$IPB2}`
        do
            #<2.1>如果第二段IP与IPB相同
            if [[ $d2 = $IPB2 ]]
            then
                #第三段IP范围为0到IPB3
                for d3 in `eval echo {0..$IPB3}`
                do
                    #<2.1.1>如果第三段IP与IPB3相同
                    if [[ $d3 = $IPB3 ]]
                    then
                        for d4 in `eval echo {0..$IPB4}`
                        do
                            echo $d1.$d2.$d3.$d4
                        done
                    #<2.1.2>如果第三段IP与IPB3不同
                    else
                        for d4 in {0..255}
                        do
                            echo $d1.$d2.$d3.$d4
                        done
                    fi
                done
            #<2.2>如果第二段IP与IPB不相同
            else
               #第三段IP范围为{0..255}
               for d3 in {0..255}
               do
                   #第四段IP范围为{0.255}
                   for d4 in {0.255}
                   do
                       echo $d1.$d2.$d3.$d4
                   done
               done
            fi
        done     
    #<3>第一段IP与IPA1和IPB1都不相同
    else
        for d2 in {0..255}
        do
            for d3 in {0..255}
            do 
                for d4 in {0..255}
                do
                    echo $d1.$d2.$d3.$d4
                done
            done
        done
    fi   
done    
}


print_range_ip(){ 
#<1>如果两IP第一段不同
if [ $IPA1 != $IPB1 ]
then
    IP1_not_equal 
#<2>如果两IP第一段相同
else
    #<2.1> 如果第二段IP相同
    if [ $IPA2 = $IPB2 ]
    then
        #<2.1.1>如果第三段IP不相同
        if [[ $IPA3 != $IPB3 ]]
        then
            IP3_not_equal 
        #<2.2.2>如果第三段IP相同
        else
            IP4_not_equal
        fi
        
    #<2.2> 如果第二段IP不相同
    else
        IP2_not_equal
    
    fi
fi
}
print_range_ip

使用方法

给权限

使用的时候记得先给777权限,比方说文件名称叫pig_ip.sh,我们则需要输入下面命令

sudo chmod 777 pig_ip.sh

运行

  • [IP_start]为起始IP
  • [IP_end]为结束IP
./pig_ip.sh [IP_start] [IP_end]

用例

比如我要输出192.168.0.0到192.168.255.255

./pig_ip.sh 192.168.0.0 192.168.255.255 >ip.txt

然后便会输出到ip.txt文件中

图片[1]-如何将A段、B段、C段网段IP按行输出为详细IP地址-FancyPig's blog

项目应用

© 版权声明
THE END
喜欢就支持一下吧
点赞35赞赏 分享
评论 共1条

请登录后发表评论