2017-08-02 130 views
0

我是新来的。 我正在处理一个脚本,该脚本必须告诉我,如果给定的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,但我不知道如何实现比较。 你有什么建议吗?我不知道从哪里开始。脚本发现IP地址是否属于IP范围

感谢

回答

-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 
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 
+0

'12.3.4.5'应该在'1.20.0.0-1.39.255.255'范围内吗? – fzd

+1

你说得对。我将不得不预先填充一些0来使数字相等。 – pikand

1

这匹马已经被鞭打了很多次,只是把它的最可靠的使用作业构建的工具。 ipcalc,nmap,这是一对夫妇。

要回答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 
+0

这是非常有用的,但我会使用fzd的脚本,因为nmap需要更多时间。无论如何,我学到了更多关于nmap的知识。我对ipcalc很感兴趣。我看到了ipcalc手册,但是我没有找到对我的案例有用的选项。你怎么能用ipcalc来做到这一点? – intore