我在文件中列出了子网范围:
2.32.0.0-2.47.255.255-255.240.0.0
2.112.0.0-2.119.255.255-255.248.0.0
2.156.0.0-2.159.255.255-255.252.0.0
2.192.0.0-2.199.255.255-255.248.0.0
...
(文件格式为:{startip}-{endip}-{netmask}
)
我需要检查文件中的某个子网中是否包含IP。
答案 0 :(得分:1)
试试这个:
BEGIN {
FS="."
ex = "false"
split(address, ip, ".")
}
{
split($0, range, "[-.]")
for (i=1; i<5; i++) {
if (ip[i] < range[i] || ip[i] > range[i+4])
break;
else if ((ip[i] > range[i] && ip[i] < range[i+4]) || i == 4)
ex = "true"
}
}
END {
print ex
}
像这样调用这个awk脚本(checkIP.awk
):
$ awk -v address="2.156.0.5" -f checkIP.awk /path/to/ip/ranges/file
true
$ awk -v address="0.0.0.0" -f checkIP.awk /path/to/ip/ranges/file
false
答案 1 :(得分:1)
您可以使用awk
:
echo '127.0.0.0-127.255.255.255-255.0.0.0' | awk -F- '
BEGIN { ip[1] = 127; ip[2] = 0; ip[3] = 0; ip[4] = 1; }
{ split($1, startIp, "."); split($2, endIp, ".");
for(i = 1; i <= 4; i++) {
if(ip[i] < int(startIp[i]) || ip[i] > int(endIp[i]))
break;
}
if(i == 5)
print "matching line: ", $0; }'
用于搜索的IP最初在BEGIN子句中设置为数组作为数组。每个行在for-cycle中进行比较,如果每个八位字节在startIp
和endIp
之间,&#34;匹配行&#34;打印出来。
一些Python 3乱码依赖3.3的ipaddress模块(适用于2.6 / 2.7:
python3 -c 'from ipaddress import ip_address as IP; list(
map(print, ((startip, endip) for startip, endip, _ in
(ip.split("-") for ip in open("tmp/iplist.txt"))
if IP(startip) < IP("127.0.0.1") < IP(endip))))'
这实际上是以下脚本的单行版本:
import sys
from ipaddress import ip_address as IP
ip = IP(sys.argv[1])
with open(sys.argv[2]) as f:
for line in f:
startIp, endIp, _ = line.split('-')
if IP(startIp) < ip < IP(endIp):
print(line)
可以这样使用:
$ python3 ipcheck.py 127.0.0.1 iplist.txt
答案 2 :(得分:1)
您可以使用此awk脚本:
awk -F- -v arg='2.158.1.2' 'function ipval(arg) {
split(arg, arr, ".");
s=0;
for (i=1; i<=length(arr); i++)
s += arr[i] * (10**(6-i));
return s
}
ipval(arg) >= ipval($1) && ipval(arg) <= ipval($2)' file
2.156.0.0-2.159.255.255-255.252.0.0
ipval
将给定的ip地址转换为数值,以便可以使用算术运算符轻松比较。
答案 3 :(得分:0)
我发现上述脚本的此变体更有用:
function ipval()
{
RES=`awk -F- -v arg="$1" '{
split(arg, arr, ".");
s=0;
for (i=1; i<=length(arr); i++) { s += arr[i] * (256**(4-i)); }
print s
}' <<< '' `
return $RES
}
read -p "IP:" IP
ipval "$IP"
echo "RES=$RES"
答案 4 :(得分:0)
检查IP是否有效以及是否在本地连接上
if ! ip route get ${ip} | grep -v via > /dev/null;then echo "bad IP";fi