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

2019-10-01 10:50:02王旭

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;