我是新来的。 我正在处理一个脚本,该脚本必须告诉我,如果给定的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范围
感谢
我是新来的。 我正在处理一个脚本,该脚本必须告诉我,如果给定的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范围
感谢
这可以工作:
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
你可以剥去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
这匹马已经被鞭打了很多次,只是把它的最可靠的使用作业构建的工具。 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
这是非常有用的,但我会使用fzd的脚本,因为nmap需要更多时间。无论如何,我学到了更多关于nmap的知识。我对ipcalc很感兴趣。我看到了ipcalc手册,但是我没有找到对我的案例有用的选项。你怎么能用ipcalc来做到这一点? – intore
'12.3.4.5'应该在'1.20.0.0-1.39.255.255'范围内吗? – fzd
你说得对。我将不得不预先填充一些0来使数字相等。 – pikand