Perl取得Linux系统的网络接口模块-IO::Interface::Simple
2014-08-09 17:23:09 阿炯

本站赞助商链接,请多关照。 IO::Interface::Simple - Perl extension for access to network card configuration information.

在linux下,可以通过'ifconfig'或'ip'指令来取得本机下的网络接口卡的信息,在perl中想取得网口信息,只有通过调用系统指令取得后通过正则表达式的取得某一些信息。这种做法显得比较业余,这里推荐一个第三方的模块,用它来取得系统中的网络接口卡的运行信息。

使用示例说明:

use IO::Interface::Simple;
#取得'eth0'网口
my $if1 = IO::Interface::Simple->new('eth0');
#取得ip为'127.0.0.1'的网口
my $if2 = IO::Interface::Simple->new_from_address('127.0.0.1');
#取得索引编号为第一块网卡的
my $if3 = IO::Interface::Simple->new_from_index(1);

#如果没有传入指定的网口信息,默认将取得本机所有的网口(包括vpn拨号的口)
my @interfaces = IO::Interface::Simple->interfaces;

for my $if (@interfaces){
 print "interface = $if\n";
 print "addr = ",$if->address,"\n",
  "broadcast = ",$if->broadcast,"\n",
  "netmask = ",$if->netmask,"\n",
  "dstaddr = ",$if->dstaddr,"\n",
  "hwaddr = ",$if->hwaddr,"\n",
  "mtu = ",$if->mtu,"\n",
  "metric = ",$if->metric,"\n",
  "index = ",$if->index,"\n";
   print "is running\n"     if $if->is_running;
   print "is broadcast\n"   if $if->is_broadcast;
   print "is p-to-p\n"      if $if->is_pt2pt;
   print "is loopback\n"    if $if->is_loopback;
   print "is promiscuous\n" if $if->is_promiscuous;
   print "is multicast\n"   if $if->is_multicast;
   print "is notrailers\n"  if $if->is_notrailers;
   print "is noarp\n"       if $if->is_noarp;
}

API说明:
$if->address:ip地址
$if->broadcast:广播地址
$if->netmask:子网掩码
$if->dstaddr:跟ip地址相似
$if->hwaddr:硬件即mac地址
$if->mtu:最大传输单元
$if->metric:路由度量值
$if->index:索引编号

$if->is_running:该接口是否激活
$if->is_broadcast:是否为广播地址
$if->is_pt2pt:是否为vpn拨号后产生的
$if->is_loopback:是否为本机圆环地址
$if->is_promiscuous:是否处在混杂模式
$if->is_multicast:是否支持多播
if->is_notrailers:
$if->is_noarp:是否已经关闭了arp响应

最新版本:1.0


项目主页:https://metacpan.org/release/IO-Interface