我是新来的。 我正在编写一个脚本,必须告诉我,如果给定的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,但我不知道如何实现比较。 请问有什么建议吗?我不知道从哪里开始。
由于
答案 0 :(得分: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
答案 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