我有一个ip地址列表。我想知道他们中的任何一个是否是保留地址(参考:http://en.wikipedia.org/wiki/Reserved_IP_addresses)。对于我的作品我使用awk所以我想知道是否有一些预制的shell脚本或类似的东西可以帮助我识别这样的地址。
答案 0 :(得分:0)
你知道unix grep
吗?
您可以让grep在其他文件中搜索存储在文件中的目标字符串列表。
fgrep -f reservedList.txt yourListOfIpsSavedToAfile
将打印yourList *中与reservedList中找到的任何单词匹配的任何行。
如果您在shell脚本中执行此操作,则可以使您的操作成为条件
if fgrep -f reservedList.txt yourList > /dev/null 2>&1 ; then
echo "found items in reserved List"
else
echo "no items found in reserved List"
fi
您可能需要使用grep -F reservedList ....
。使用上面的第一个示例来查看它是否正常工作,如果没有,请查看man grep
以查看在OS / grep版本中使用的确切参数。
如果你真的需要在awk中这样做,你基本上会在awk中重建这个功能。
我希望这会有所帮助。
答案 1 :(得分:0)
如果您逐行提供好的旧IPv4地址列表作为脚本的输入
while IFS=. read A B C D
do ADDR=`printf %03d.%03d.%03d.%03d $A $B $C $D`
[[ 000.255.255.255 < $ADDR && $ADDR < 010.000.000.000 ]] && continue
[[ 010.255.255.255 < $ADDR && $ADDR < 100.064.000.000 ]] && continue
[[ 100.127.255.255 < $ADDR && $ADDR < 127.000.000.000 ]] && continue
[[ 127.255.255.255 < $ADDR && $ADDR < 169.254.000.000 ]] && continue
[[ 169.254.255.255 < $ADDR && $ADDR < 172.016.000.000 ]] && continue
[[ 172.031.255.255 < $ADDR && $ADDR < 192.000.000.000 ]] && continue
[[ 192.000.000.007 < $ADDR && $ADDR < 192.000.002.000 ]] && continue
[[ 192.000.002.255 < $ADDR && $ADDR < 192.088.099.000 ]] && continue
[[ 192.088.099.255 < $ADDR && $ADDR < 192.168.000.000 ]] && continue
[[ 192.168.255.255 < $ADDR && $ADDR < 198.018.000.000 ]] && continue
[[ 198.019.255.255 < $ADDR && $ADDR < 198.051.100.000 ]] && continue
[[ 198.051.100.255 < $ADDR && $ADDR < 203.000.113.000 ]] && continue
[[ 203.000.113.255 < $ADDR && $ADDR < 224.000.000.000 ]] && continue
echo $A.$B.$C.$D is reserved
done
,它将输出任何保留的地址。