问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

linux下使用perl获取本机ip的几种方法介绍

发布网友 发布时间:2022-04-24 16:07

我来回答

1个回答

热心网友 时间:2022-04-18 23:53

第一种办法,最简单的,
调用 shell:
$ip = `ifconfig eth0|grep -oE '([0-9]{1,3}\.?){4}'|head -n 1`;

注:这里输入是固定的,所以简单的 [0-9]{1,3} 了,如果是在 web 程序等地方验证 ip,需要更严谨!
或者
$ip = `ifconfig eth0|awk -F: '/inet addr/{split($2,a," ");print a[1];exit}'`;

好吧,这样显得太不 perl 了,而且频繁的调用外部 shell 不太好

第二种:
open FH,"ifconfig eth0|";
while(){
last unless /inet addr:((\d{1,3}\.?){4})/;
print $1;
}
看起来稍微 perl 了一些,虽然实质跟上面的调用 shell 和 grep 法是一样的。

第三种,更 perl 一点,纯粹读文件:
open FH,'<','/etc/sysconfig/network-scripts/ifcfg-eth0';
while(){
next unless /IPADDR\s*=\s*(\S+)/;
print $1;
}

进一步的,如果不一定 rh 系,还要去读 /etc/issue ,
确定网络配置文件到底是 /etc/sysconfig/network-script/ifcfg-eth0
还是 /etc/network/interfaces 还是其他,然后根据不同发行版写不同的处理方法……额,
这是打算自己写模块么?

好吧,大家来充分体会 CPAN 的魅力,去 search 一下,
找到一把 Sys::HostIP、Sys::HostAddr、Net::Inetface 等模块。

第四种:
use Sys::HostAddr;
my $interface = Sys::HostAddr->new(ipv => '4', interface => 'eth0');
print $interface->main_ip;

不过进去看看pm文件,汗,这几个模块都是调用ifconfig命令,不过是根据发行版的不同进行封装而已。
还有办法么?还有,看

第五种:
perl -MPOSIX -MSocket -e 'my $host = (uname)[1];print inet_ntoa(scalar gethostbyname($host))';
不过有童鞋说了,这个可能因为hostname的原因,导致获取的都是127.0.0.1……

那么最后还有一招。通过 strace ifconfig 命令可以看到,
linux 实质是通过 ioctl 命令完成的网络接口 ip 获取。那么,我们也用 ioctl 就是了!

第六种如下:
#!/usr/bin/perl
use strict;
use warnings;
use Socket;
require 'sys/ioctl.ph';
sub get_ip_address($) {
my $pack = pack("a*", shift);
my $socket;
socket($socket, AF_INET, SOCK_DGRAM, 0);
ioctl($socket, SIOCGIFADDR(), $pack);
return inet_ntoa(substr($pack,20,4));
};
print get_ip_address("eth0");

这样的好处,就是只调用了核心模块,在分发脚本时,不用连带安装其他模块。追答调用shell

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
爱彼(ap)手表排名(AP爱彼手表型号在哪个位) 地球上会出现极昼和极夜现象的地区是( )A.南温带B.北温带C.南寒带... 我们生活的湛江地区位于( )A.热带B.南温带C.北温带D.北寒 ...的地区是 () A.热带 B.北温带 C.南温带 D.北寒带 ...我今天买了个金镶玉的吊坠,千足金镶在和田玉上的,不知道怎么分辨真 ... 不要买长虹电视,长虹32寸液晶质量级差,刚看一年半就坏了,维修人员说过... 长虹电视机质量怎么样 街头篮球角色能力值相差太大。 街头篮球怎么堆能力值 街头篮球鞋子锻造可选能力值的问题、 影响电动车蓄电池寿命的因素有哪些? 锂电池大电流充电对电池有危害吗 蓄电池充放电性能对电池工作性能有何影响 200ah蓄电池持续放电电流50a的话,会不会影响蓄电池寿命 大电流放电对锂电影响有多大 电池,充电 放电电流大小对蓄电池容量有什么影响 电流过大对锂电池的影响 什么是过放电对电池性能有何影响 锂电池大电流放电对电池的影响 怎么让电脑连接手机热点 电池放电电流对电池容量有什么影响 电池保护板充电和放电电流选大了会有什么影响? 锂电池大电流放电危害 请教大电流放电对电池容量和寿命影响大吗 什么叫电瓶过放电 对电瓶有什么影响和伤害 大电流放电对锂电池有什么影响 蓄电池大电流充放电有什么后果? 荣耀9X怎么从农村淘宝切换淘宝标准版? 手机淘宝极简模式如何恢复标准版? 苹果手机QQ下载的软件下完了怎么安装,是安装不是查找? 谁是您遇到过的最难忘的人呢? 感谢所有遇见、无论你遇见谁、他都是你生命中该遇见的人? 你这一生中遇到过的最与众不同的人是谁?他有什么与众不同之处? 我遇到的是怎样的一个男人? 一个人会遇见谁真是注定的吗? PPT如何让一段文字中的每句话一句一句依次飞入 请问人的一生要遇到的四个人是谁! 那个ppt怎么让字逐句显示 ppt 文本句首怎么打空格 人际关系。我在生活中遇到四种人,我应该听谁的 遇到和自己同名字的人,叫名字的时候是一种什么感觉? 江畔独步寻花七绝句ppt 有首歌的歌词里有一句“我遇见对的人” 歌叫什么名字 急急急!!! 人生遇到哪3种人,是你的福气? 我一直相信释迦牟尼说的一句话: “无论你遇见谁,他都是你生命该出现的人,绝非偶然,他一定会教会你一 谁能告诉我,两个人在一起只是为了个人*吗?为什么我遇到的每个人都是如此? 当你遇到困难时,你最先想到的人是谁 什么是遇到对的人 当你遇到危险时,第一个想到的人会是谁? 有句歌词“我遇见谁会有怎样的对白&#47;我等的人他在多远的未来”好像是孙燕姿的,名字叫什么呢