当前位置 博文首页 > Perl中使用dig和nali判断DNS解析地址归属地是否一致脚本分享

    Perl中使用dig和nali判断DNS解析地址归属地是否一致脚本分享

    作者:乡村运维 时间:2021-02-02 18:04

    这里首先介绍下nali的这个开源小程序,项目地址:http://code.google.com/p/qqwry/

    以下介绍来自项目的负责人的网站的陈述:

    复制代码 代码如下:

    下载

    nali-0.2.tar.gz – 2011-09-11发布(下载链接一,下载链接二)
    nali-0.1.tar.gz – 2009-08-16发布

    说明

    nali,名字取自中文“哪里”的拼音。nali包含一组命令行程序,其主要功能就是把一些网络工具的输出的IP字符串,附加上地理位置信息(使用 纯真数据库QQWry.Dat)。例如218.65.137.1会变成218.65.137.1[广西南宁市 电信]。查询是在本地进行,并不会进行联网查询,所以效率方面不会对原始命令产生什么影响。

    目前包含以下几个命令:
    nali
    nali-dig
    nali-nslookup
    nali-traceroute
    nali-tracepath
    nali-ping

    使用这些命令的前提是,他们对应的命令必须存在。例如你要用nali-dig,必须保证dig是存在的。他们的用法和原始命令是一样的。例如nali-dig,用法就和dig一样。(nali-dig等同于dig |nali)

    大家可能注意到了nali这个命令,它可以对标准输出的IP串附加上地理信息。nali-*系列工具都是基于这个来实现的。

    如果你觉得输入nali-xxx麻烦,那么可以做一些alias,例如
    surfchen@mac:~$ alias traceroute='nali-traceroute'
    surfchen@mac:~$ alias dig='nali-dig'

    如果你在使用一种没有被包含在nali包里的网络工具,那么可以这样:
    surfchen@mac:~$ my_network_tool|nali
    Server 115.168.51.180[中国 电信CDMA]
    也就是说,nali这个命令,可以对标准输出的ip,附加上地理信息。同理,如果你不喜欢用nali-dig,那么也可以用dig ip|nali这样的命令。

    当然,你也可以直接用nali查询IP地址信息:
    surfchen@mac:~$ nali 222.217.167.105
    222.217.167.105[广西南宁市 电信]

    安装

    ./configure
    make
    [sudo] make install

    更新IP数据库

    可用nali-update命令来更新IP数据库

    开发

    svn co http://qqwry.googlecode.com/svn/trunk/nali/ nali
    注意,svn里并不包含QQWry.Dat,如需要从svn版本编译,那么请自行下载QQWry.Dat,然后放入项目的share目录。
    Bug提交:http://code.google.com/p/qqwry/issues/list
    例子

    例子

    下面有3个例子。
    chenze@osx:~$ nali-traceroute www.travel-web.com.tw
    traceroute to ns806.travel-web.com.tw (219.87.177.148[台湾省 台湾大宽频]), 64 hops max, 40 byte packets
    1 192.168.0.1[局域网 对方和您在同一内部网] (192.168.0.1[局域网 对方和您在同一内部网]) 0.747 ms 0.353 ms 0.278 ms
    2 115.168.51.180[中国 电信CDMA] (115.168.51.180[中国 电信CDMA]) 435.595 ms 65.757 ms 48.906 ms
    3 115.168.51.161[中国 电信CDMA] (115.168.51.161[中国 电信CDMA]) 70.990 ms 66.751 ms 46.936 ms
    4 115.168.51.17[中国 电信CDMA] (115.168.51.17[中国 电信CDMA]) 192.944 ms 72.679 ms 46.958 ms
    5 222.217.167.105[广西南宁市 电信] (222.217.167.105[广西南宁市 电信]) 66.963 ms 54.412 ms 54.943 ms
    6 218.65.137.1[广西南宁市 电信] (218.65.137.1[广西南宁市 电信]) 102.969 ms 73.220 ms 47.016 ms
    7 202.97.21.165[广西 电信骨干网] (202.97.21.165[广西 电信骨干网]) 432.915 ms 161.390 ms 165.018 ms
    8 * 202.97.40.225[中国电信 骨干网] (202.97.40.225[中国电信 骨干网]) 185.598 ms 161.236 ms
    9 202.97.33.202[上海市 电信骨干网国际出口] (202.97.33.202[上海市 电信骨干网国际出口]) 79.857 ms 66.537 ms

    工欲善其事,必先利其器,利器有了,下面说下我们的需求。有一批域名,31个DNS地址,现在要轮循这些域名在31个DNS的解析结果是不是一样的,一样则输入到另外一个文件;下面是脚本:

    复制代码 代码如下:

    #!/usr/bin/perl
    use strict;

    open DNS, “DNS_IP.txt” or die “i can't filnd the file1!\n”;;
    open URL, “url_jiangsu.txt” or die “i can't filnd the file!\n”;;
    open NUM, “>>numbers.txt”;
    open URLS,”>>url_in_jiangsu.txt”;
    while( my $url=<URL>){
    chomp $url;
    my $num_1=0;
    my $all=0;
    $num_1='/usr/bin/dig \@221.131.143.69 $url +tries=1 +time=3 +short|grep -v ‘[a-z].*'|head -1|nali|grep -q ‘江苏.*移动' && echo  1||echo  0′;#注意这里第一和最后一个单引号是其实是tab键上面那个
    while (my $dns=<DNS>){
    chomp $dns;
    my $num='/usr/bin/dig \@$dns $url +tries=1 +time=3 +short|grep -v ‘[a-z].*'|head -1|nali|grep -q ‘移动' && echo  1||echo  0′;#注意这里第一和最后一个单引号是其实是tab键上面那个
    $all+=$num;
    }
    if($all == 31 and $num_1==1){
    print URLS  $url.”\n”;
    }
    print NUM $url.” “.$all.”\n”;
    seek( DNS, 1, 0 );

    }
    close DNS;
    close URL;
    close URLS;
    close NUM;


    js
下一篇:没有了