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

script to discover if an IP address belongs to an IP range

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

谢谢

您可以去掉 IP 中的点并比较数字

#!/bin/bash

export IFS="."
function convertToNumber() {
    ipNumber=""
    for i in ; 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

这匹马已经被鞭打过很多次了,简单地说,使用专为这项工作打造的工具是最可靠的。 ipcalcnmap,举几个例子。

要回答关于 "if it's within" 的 bash 部分,您可以列出您的范围并使用 grep

例如,使用nmap:

#!/usr/bin/env bash
ipRange=""
singleIP=""

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

这可行:

function checkInRange() {
 hostMin=
 hostMax=
 ip=

 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