通过perl获取系统使用的IP和网口
? ?在linux和FreeBSD系统上,可以通过ifconfig来确认有多少IP,或者有多少网口,也可以通过读取配置文件来获取相关的IP。 ? ? 但是,在不通的系统,网口的命名是不一样的,即使是同样的操作系统,实体机和虚拟机的网卡命名规则也是不一样的,如:CentOS 5.x的命名规则是ethx,而在CentOS 6.x,命名规则则是emx;FreeBSD上也有re0和bce0的命令区分。 ? ? ?所以,如果要按照读取配置文件的方式或者利用ifconfig命令来获取的话,那么过滤规则就会有多个,不太方便。 ? ? ?利用perl的模块,可以省略很多的操作。
? 对于$ip_addr是一个hash,其结构如下图: ? ?而对于同一张网卡有多个IP的,其hash结构如下图: ? ?网卡名作为key存在hash体里,而value则是一个匿名的数组,数组只有一个元素,这个元素是一个匿名的hash,这个hash里有2个key,对应的value分别是netmask和address。 ? ?程序里有两个foreach,第一个foreach得到的是网卡名,而第二个foreach里的列表变量是一个匿名的数组,而数组的值是匿名的hash。
? ?由于这个数组只有一个值,所以,这个也是数组里匿名hash的引用。 ? ?如果单张网卡上有多个IP的话,也能这么来取值,先通过下面的结构来看看
? ?上面语句只将bec1的数据结构打印出来,如下图: ? 可以看到,是两个hash,这样对于同一个网卡有多个IP的,可以采取同样的方式来取得所有的值。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |