设为首页 收藏本站
查看: 1203|回复: 0

[经验分享] 通过perl获取系统使用的IP和网口

[复制链接]

尚未签到

发表于 2018-8-31 09:45:48 | 显示全部楼层 |阅读模式
  在linux和FreeBSD系统上,可以通过ifconfig来确认有多少IP,或者有多少网口,也可以通过读取配置文件来获取相关的IP。
  但是,在不通的系统,网口的命名是不一样的,即使是同样的操作系统,实体机和虚拟机的网卡命名规则也是不一样的,如:CentOS 5.x的命名规则是ethx,而在CentOS 6.x,命名规则则是emx;FreeBSD上也有re0和bce0的命令区分。
  所以,如果要按照读取配置文件的方式或者利用ifconfig命令来获取的话,那么过滤规则就会有多个,不太方便。
  利用perl的模块,可以省略很多的操作。
  


  • #!/usr/bin/perl -w
  • use strict;
  • use Sys::HostAddr;
  • use Data::Dumper;

  • my $sysaddr=Sys::HostAddr->new();

  • my $ip_addr=$sysaddr->ip();
  • #print Dumper($ip_addr);
  • foreach my $interface(keys %{$ip_addr})
  • {
  •         foreach my $aref(@{$ip_addr->{$interface}})
  •         {
  •                 printf("$interface  $aref->{address}\n");
  •                 #print Dumper($aref);
  •         }
  • }
  

  对于$ip_addr是一个hash,其结构如下图:
DSC0000.png

  而对于同一张网卡有多个IP的,其hash结构如下图:
DSC0001.png

  网卡名作为key存在hash体里,而value则是一个匿名的数组,数组只有一个元素,这个元素是一个匿名的hash,这个hash里有2个key,对应的value分别是netmask和address。
  程序里有两个foreach,第一个foreach得到的是网卡名,而第二个foreach里的列表变量是一个匿名的数组,而数组的值是匿名的hash。
  


  • $ip_addr->{$interface};
  

  由于这个数组只有一个值,所以,这个也是数组里匿名hash的引用。
  如果单张网卡上有多个IP的话,也能这么来取值,先通过下面的结构来看看
  


  • print Dumper(@{$ip_addr->{$interface}})  if($interface =~ /bce1/m);
  

  上面语句只将bec1的数据结构打印出来,如下图:
DSC0002.png

  可以看到,是两个hash,这样对于同一个网卡有多个IP的,可以采取同样的方式来取得所有的值。
  




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-559222-1-1.html 上篇帖子: Perl Learning - 4 (pop/push/shift/unshift, foreach, $_) 下篇帖子: perl编写ping脚本
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表