• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell
您的位置:首页 > 脚本语言 >perl > Perl脚本检测一个域名是否有效

Perl脚本检测一个域名是否有效

作者:junjie 字体:[增加 减小] 来源:互联网

junjie 通过本文主要向大家介绍了perl脚本,perl脚本下载,perl脚本实例,perl脚本怎么运行,perl脚本编辑器等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

脚本功能:通过ICMP Ping或TCP/SYN探测指定的域名,探测前检测域名是否有效。

file: check.host.pl

#!/usr/bin/perl

use strict;
use Net::Ping;
use Net::DNS;
use Time::HiRes qw();
$| = 1;

my $DEFAULT_TIMEOUT = 2;
my $PING_TIMEOUT = 2;
my $DNS_TIMEOUT = 3;

### 查询域名是否有效
sub queryDomain {

  my $domain = shift();
  my $query = '';
  my $dns  = Net::DNS::Resolver->new(
    tcp_timeout => $DNS_TIMEOUT, udp_timeout => $DNS_TIMEOUT, retry => 1
  );
  my @nameservers = qw/8.8.8.8 114.114.114.114/;
  $dns->nameservers(@nameservers);
  eval {
	$query = $dns->search($domain,'A');
  };
  if ($@ or ! $query) {
    my $err = $dns->errorstring ;
    print "ERR: query $domain failed: $errn";
    return if ($err =~ /NXDOMAIN/);
  }
  return 'OK';
}

### return nothing is FAILED, other is OK
sub pingHost {
  my $arg = shift();

  return 1 if (ref $arg ne 'HASH');

  my $p;
  eval { $p = Net::Ping->new($arg->{'proto'},$DEFAULT_TIMEOUT,0) };

  if ($@) { 
	warn "ERR to create Net::Ping object: $@n"; 
    return;
  }
	
  $p->hires();
  my ($host,$duration,$hip,$rep,$ret);

  ### tcp/syn ping
  if ($arg->{'proto'} eq "syn") {
	$p->{port_num} = $arg->{'port'};
	$p->ping($arg->{'host'},$PING_TIMEOUT);
	if (($host,$duration,$hip) = $p->ack()) {
	  printf("ACK Reply from $arg->{'host'}[%s] time=%.2f msn", $hip, $duration * 1000);
      $ret = 'OK';
    } else {
      warn "SYN Request for $arg->{'host'} timed out.n";
	}
  }  

  ### icmp ping
  else {
    ($rep,$duration,$hip) = $p->ping($arg->{'host'},$PING_TIMEOUT);
    if ($rep) {
      printf("Echo Reply from $arg->{'host'}[%s] time=%.2f msn", $hip, $duration * 1000);
      $ret = 'OK';
    }
	else {
      warn "PING Request for $arg->{'host'} timed out.n";
  	}
  }
  $p->close;
  undef($p);
  return $ret;
}

my $ARG = { proto => 'syn', port => 80 };
my $host = $ARGV[0];
my $proto = $ARGV[1];

die "Usage: $0 [icmp]n" if (! $host);
$ARG->{'host'} = $host;
$ARG->{'proto'} = $proto if ($proto);

my $code;
if (&queryDomain($host) eq 'OK' and $code = &pingHost($ARG)) {
  print "$host is online !n";
}
else {
  print "$host is DOWN !n";
}
</div>

测试例子:

# ./check.host.pl 2013.jb51.net
ERR: query 2013.jb51.net failed: NXDOMAIN
2013.jb51.net is DOWN !

# ./check.host.pl www.jb51.net
ACK Reply from www.jb51.net[173.255.214.254] time=307.04 ms
www.jb51.net is online !

# ./check.host.pl jb51.net icmp
Echo Reply from jb51.net[173.255.214.254] time=205.61 ms
jb51.net is online !

# ./check.host.pl chinagfw.com icmp
PING Request for chinagfw.com timed out.
chinagfw.com is DOWN !
</div>

</div>

您可能想查找下面的文章:

  • perl中使用signal(信号)实例
  • perl读写文件代码实例
  • Perl脚本实现递归遍历目录下的文件
  • Perl脚本实现检测主机心跳信号功能
  • perl实现检测服务器中的服务是否正常脚本分享
  • perl 采集入库脚本分享
  • Perl中使用MIME::Lite发送邮件实例
  • perl脚本学习指南--读书笔记
  • perl脚本实现限制ssh最大登录次数(支持白名单)
  • perl查找进程PID的例子

相关文章

  • perl 删除数组元素的几种方法小结
  • Perl 哈希Hash用法之入门教程
  • perl中子程序中参数的两种引用(传递)方式介绍
  • 为Java程序员准备的10分钟Perl教程
  • perl文件包含(do,require,use)指令介绍
  • Windows和Linux系统下perl连接SQL Server数据库的方法
  • Perl5 OOP学习笔记第1/2页
  • 让apache2以cgi方式运行perl cgi程序的实现方法
  • perl 变量 $/ 的用法解析 上下文为行模式时,$/ 定义以什么来区分行
  • Perl中的列表和数组学习笔记

文章分类

  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell

最近更新的内容

    • perl pop push shift unshift实例介绍
    • perl实现的两个文件对比并对数据进行筛选的脚本代码
    • perl文件读取的几种处理方式小结
    • Perl中怎样从数组中删除某个值?
    • perl ping检测功能脚本代码
    • perl中单行注释和多行注释使用介绍
    • Perl使用nginx FastCGI环境做WEB开发实例
    • perl中5个常见错误
    • 分享下perl胶水实现前后台对接的方法
    • Perl命令行应用程序详解

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有