ip保留地址检查功能

时间:2011-10-26 09:47:59

标签: bash shell awk ip-address

我有一个ip地址列表。我想知道他们中的任何一个是否是保留地址(参考:http://en.wikipedia.org/wiki/Reserved_IP_addresses)。对于我的作品我使用awk所以我想知道是否有一些预制的shell脚本或类似的东西可以帮助我识别这样的地址。

2 个答案:

答案 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

,它将输出任何保留的地址。