ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 在PC上自动更新hosts列表的方法

在PC上自动更新hosts列表的方法

原创 Linux操作系统 作者:perltest 时间:2012-01-25 00:10:12 0 删除 编辑

前些天写了《通过国外SSH自动更新hosts列表》,经过在网上交流,这个方法对SSH是有权限要求的,很多国外SSH不允许上传程序运行。

但是,权限再低,SSH还是可以做成一个本地socks5代理的,本文就是通过socks5代理在PC上更新hosts。

本来有一个简单的方法,就是通过PC上nslookup -vc的命令自动处理就可以了。但有人发现,某些域名在通过nslookup -vc查询时会引发连接reset,试了一下确实如此。

本文是讨论通过socks5代理来更新hosts,过程是:
1. 首先通过国外SSH在本地做一个socks5代理,这个网上有很多实现方法,不再多说。
2. 下载并运行DNS2SOCKS.exe,使用前面做的本机socks5代理。(这个程序是刚在网上发现的,作用是设定dns通过socks5代理解析)。
3. 运行下面的Perl程序,dns.txt是旧的hosts文件,程序按照文件内容,逐个通过socks5代理查询IP,并把结果保存在hosts。

PC系统是XP,其他的windows系统没测试。其实,开着VPN更新hosts是最简单的,但需要对下面的程序的查询方式稍做修改。

------1.27补充几点说明:--------
1. 本文所说的“更新hosts列表”是指对hosts的内容重新逐个验证,并保存下来查询结果,并非指直接从网上下载一份新的hosts文件。
2. 不要使用dns2socks.exe直接连接国外socks5代理,因为这样还是会偶尔引发连接reset,使用SSH作为socks5代理,是因为SSH连接本身是加密的。
3. 国外SSH如果权限允许,还是最方便的,Perl程序可以直接运行,一个近千行的hosts文件不到两分钟就更新完毕。在XP上还要安装Perl运行软件,ActivePerl或StrawberryPerl。

#!/usr/bin/perl

open (f1,"dns.txt");
my @list = ;
close f1;

open (f1,">hosts");

foreach $list (@list)
{
 my $qs2='';
 my $domain = '';
 my @t = split (" ",$list);

 if ($t[0]!~/#/) {$domain = $t[1]};

 if ($domain)    
 {
  $qs = `nslookup $domain 127.0.0.1`;
  $qs =~s/\n|\r//g;

 # 在XP系统上的处理
 if ($qs=~/Addresses/)
 {
  if ($qs=~/Addresses:  (.*?),/)
  { $qs2 = $1; }
 }
 else
 {
  if ($qs=~/Aliases/)
  {
   ($temp,$qs2)=($qs=~/Address:(.*?)Address:  (.*)Aliases/);
   $temp='';
  }
  else
  {
   ($temp,$qs2)=($qs=~/Address:(.*?)Address:  (.*)/);
   $temp='';
  }
 }
 }

 if ($qs2)
 {
  $qs2=~s/ //;
  print  "\n$qs2 $domain";
  print f1 "\n$qs2 $domain";
 }
}

close f1;


 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/21129783/viewspace-715183/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2016-08-15

  • 博文量
    113
  • 访问量
    102046