用于发现 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
这匹马已经被鞭打过很多次了,简单地说,使用专为这项工作打造的工具是最可靠的。 ipcalc
、nmap
,举几个例子。
要回答关于 "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
我是新来的。 我正在编写一个脚本,该脚本必须使用 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
这匹马已经被鞭打过很多次了,简单地说,使用专为这项工作打造的工具是最可靠的。 ipcalc
、nmap
,举几个例子。
要回答关于 "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