用于发现IP地址是否属于IP范围的脚本

时间:2017-08-02 10:28:03

标签: linux bash ip range belongs-to

我是新来的。 我正在编写一个脚本,必须告诉我,如果给定的IP地址属于IP范围,使用bash脚本。 例如: 从像10.103.240.0/20这样的大范围开始我必须在bash linux中编写一个脚本来发现ip 10.102.247.221是否属于该范围? 我知道HostMin是10.103.240.1和HostMax 10.103.255.254,但我不知道如何实现比较。 请问有什么建议吗?我不知道从哪里开始。

由于

3 个答案:

答案 0 :(得分:1)

这匹马多次被鞭打,简单地说它是最可靠的,使用为工作而建的工具。 ipcalcnmap,为一对夫妇命名。

要回答bash部分有关“如果它在”内,您可以列出您的范围并使用grep

例如,使用nmap

#!/usr/bin/env bash
ipRange="$1"
singleIP="$2"

nmap -sL -Pn -sn -n "$ipRange" \
| grep -o "[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*" \
| if (grep -q "$singleIP"); then 
    echo "In Range"
else 
    echo "Not in range"
fi


单元测试

19:08:40 ツ :~ >./script.sh 10.103.240.0/20 10.102.247.221
Not in range

19:10:02 ツ :~ >./script.sh 10.103.240.0/20 10.103.241.111
In Range

答案 1 :(得分:0)

您可以从IP中剥离点并比较数字

#!/bin/bash

export IFS="."
function convertToNumber() {
    ipNumber=""
    for i in $1; do
        part="$i"
        while [ ${#part} -lt 3 ]; do
            part="0${part}"
        done
        ipNumber="${ipNumber}${part}"

    done
    echo ${ipNumber}
}

ip=$(convertToNumber "12.3.4.5")
min=$(convertToNumber "1.20.0.0")
max=$(convertToNumber "1.39.255.255")

if [ $ip -ge $min ] && [ $ip -le $max ]; then
    echo "${ip} is in range $min - $max"
else
    echo "${ip} is not in range $min - $max"
fi

答案 2 :(得分:-1)

这可行:

function checkInRange() {
 hostMin=$1
 hostMax=$2
 ip=$3

 for i in $(seq 4)
 do
   hMini=$(echo $hostMin | cut -d'.' -f$i)
   hMaxi=$(echo $hostMax | cut -d'.' -f$i)
   ipi=$(echo $ip | cut -d'.' -f$i)
   if [[ $ipi -gt $hMaxi || $ipi -lt $hMini ]]
   then
     echo "$ip not in $hostMin - $hostMax range"  
     return 1
   fi
 done
 echo "$ip in $hostMin - $hostMax range"  
 return 0
}

if [[ $(checkInRange $hostMin $hostMax $ip) -eq 0 ]] 
then
  # Do your stuff...
fi