千家信息网

Linux中怎么获取本机ip

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,本篇文章给大家分享的是有关Linux中怎么获取本机ip,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。调用shell:$ip = `ifc
千家信息网最后更新 2026年11月03日Linux中怎么获取本机ip

本篇文章给大家分享的是有关Linux中怎么获取本机ip,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

调用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/perluse 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");

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

注:这个其实是根据网上有的一个py的脚本修改的,py版如下:

#!/usr/bin/pythonimport socketimport fcntlimport structdef get_ip_address(ifname):    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)    return socket.inet_ntoa(fcntl.ioctl(            s.fileno(),            0x8915,  # SIOCGIFADDR            struct.pack('256s', ifname[:15])    )[20:24])print get_ip_address('eth0')

以上就是Linux中怎么获取本机ip,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注行业资讯频道。

模块 不同 命令 就是 文件 本机 实质 更多 知识 篇文章 网络 脚本 还是 发行 严谨 实用 频繁 不用 办法 原因 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技有限公司 广州为想互联网科技有限公司 蓝思科技飞鸽互联网 互联网和科技创新 关于新基建和互联网科技 互联网公司 科技公司 中国互联网科技发展 天下捷融互联网科技 互联网科技论坛 互联网为啥属于高科技 浙江互联网科技研学营 长沙茂晟互联网科技有限公司 工业互联网展湾科技股份有限公司 风投北京互联网科技 萌小萌互联网科技河南有限公司 普陀区互联网教育科技管理办法 容联科技互联网电商 保山互联网科技靠谱吗 盐城市攀科互联网科技有限公司 科技发展第三阶段互联网时代 中国互联网科技工作委员会毛军 科技股互联网 互联网核心科技是什么 深圳卡尔迅互联网科技有限公司怎么样 广西拼得多互联网科技有限公司 互联网科技公司的市场部门 西藏七维空间互联网科技有限公司 青岛中康互联网医疗科技有限公司 科技互联网的估值 求路客互联网科技电话
0