我的编程空间,编程开发者的网络收藏夹
学习永远不晚

linux下如何使用perl获取本机ip

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

linux下如何使用perl获取本机ip

本篇内容主要讲解“linux下如何使用perl获取本机ip”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“linux下如何使用perl获取本机ip”吧!

在使用 Gearman 做分布式处理时,各机需要注册一个独立的 job 作为信息反馈,为求方便,Gearman::Worker 脚本 register_function 代码又要通用,于是想到了使用各自的 ip 地址作为 job 命名。

那么怎么在 worker 脚本里获取本机 ip 作为 func 呢?

第一种办法,最简单的,调用 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(<FH>){
        last unless /inet addr:((\d{1,3}\.?){4})/;
        print $1;
}


看起来稍微 perl 了一些,虽然实质跟上面的调用 shell 和 grep 法是一样的。

第三种,更 perl 一点,纯粹读文件:

代码如下:


open FH,'<','/etc/sysconfig/network-scripts/ifcfg-eth0';
    while(<FH>){
        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");


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

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

py版如下:

代码如下:


#!/usr/bin/python
    import socket
    import fcntl
    import struct
    def 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')

2012年12月19日增:
为logstash的input/file.rb找到。
ruby版本的:

代码如下:


#!/usr/bin/ruby
    require 'socket' 
    SIOCGIFADDR    = 0x8915          # get PA address           
    def get_ip_address(iface) 
      begin 
        sock = UDPSocket.new 
        buf = [iface,""].pack('a16h26') 
        sock.ioctl(SIOCGIFADDR, buf); 
        sock.close 
        buf[20..24].unpack("CCCC").join(".") 
      rescue 
        nil 
      end 
    end 
    if $0 == __FILE__ 
      puts get_ip_address('eth0') 
    end


不过看puppet里还是用ifconfig的方法,大家有时间可以搜索下相关内容。

到此,相信大家对“linux下如何使用perl获取本机ip”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

linux下如何使用perl获取本机ip

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

linux下如何使用perl获取本机ip

本篇内容主要讲解“linux下如何使用perl获取本机ip”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“linux下如何使用perl获取本机ip”吧!在使用 Gearman 做分布式处理时,各机
2023-06-09

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

在使用 Gearman 做分布式处理时,各机需要注册一个独立的 job 作为信息反馈,为求方便,Gearman::Worker 脚本 register_function 代码又要通用,于是想到了使用各自的 ip 地址作为 job 命名。 那
2022-06-04

Linux下如何使用dhcp自动获取IP

小编给大家分享一下Linux下如何使用dhcp自动获取IP,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!dhcp是动态主机设置协议(Dynamic Host Co
2023-06-27

Linux Shell脚本中如何获取本机ip地址

小编给大家分享一下Linux Shell脚本中如何获取本机ip地址,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!什么是Linux系统Linux是一种免费使用和自由
2023-06-09

vue如何获取本机ip地址

Vue.js 是一款流行的前端开发框架,它可以帮助开发者构建动态且高效的用户界面。在许多 Vue.js 项目中,我们需要获取本地 IP 地址来识别设备以及进行网络调试和测试。接下来,我们将介绍如何在 Vue.js 中获取本地 IP 地址。1. 通过原生 JavaScript 获取本地 IP 地址Vue.js 在原生 JavaScript 的基础上构建而成,因此我们可以通过使用原
2023-05-24

Linux下通过python获取本机ip方法示例

下面介绍在linux上利用python获取本机ip的方法. 经过网上调查, 发现大致有两种方法, 一种是调用shell脚本,另一种是利用python中的socket等模块来得到,下面是这两种方法的源码:#!/usr/bin/env pyth
2022-06-04

linux中如何使用python3获取ip地址

前言 这篇文章主要介绍了linux中如何使用python3获取ip地址,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下。 一、不带参数#!/usr/bin/python# -*- codin
2022-06-04

使用Java如何获取IP地址

本篇文章给大家分享的是有关使用Java如何获取IP地址,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。一、通过IP获取机器名 or 通过机器名获取iphost :主机
2023-05-31

Linux下如何使用Inxi获取系统信息

这篇文章给大家分享的是有关Linux下如何使用Inxi获取系统信息的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Inxi 最初是为控制台和 IRC(网络中继聊天)开发的一个强大且优秀的命令行系统信息脚本。可以使用
2023-06-27

如何使用 Go 获取客户端 DNS IP

学习知识要善于思考,思考,再思考!今天编程网小编就给大家带来《如何使用 Go 获取客户端 DNS IP》,以下内容主要包含等知识点,如果你正在学习或准备学习Golang,就都不要错过本文啦~让我们一起来看看吧,能帮助到你就更好了!问题内容我
如何使用 Go 获取客户端 DNS IP
2024-04-04

Android开发如何实现在Wifi下获取本地IP地址

这篇文章主要介绍了Android开发如何实现在Wifi下获取本地IP地址,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获。下面让小编带着大家一起了解一下。具体如下:代码核心介绍:WifiManager类提供了对设备
2023-05-30

如何使用 Golang 获取我的 wifi IP 地址?

php小编小新在这里为大家介绍如何使用Golang获取自己的wifi IP地址。Golang是一种高效且简洁的编程语言,它提供了很多方便的方法来处理网络相关的任务。要获取wifi IP地址,我们可以使用Golang的net包和os/exec
如何使用 Golang 获取我的 wifi IP 地址?
2024-02-09

Linux下如何使用脚本随机更换壁纸

这篇文章将为大家详细讲解有关Linux下如何使用脚本随机更换壁纸,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。下载并安装、运行打开一个终端,并克隆 GitHub 仓库。如果没有安装的话,你需要安装 feh
2023-06-27

如何在Linux中使用shell脚本获取当前工作目录

如何在Linux中使用shell脚本获取当前工作目录?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。如下:workdir=$(cd $(dirname $0); pwd)步骤1d
2023-06-09

python利用标准库如何获取本地IP示例详解

标准库Python拥有一个强大的标准库。Python语言的核心只包含数字、字符串、列表、字典、文件等常见类型和函数,而由Python标准库提供了系统管理、网络通信、文本处理、数据库接口、图形系统、XML处理等额外的功能。Python标准库的
2022-06-04

编程热搜

目录