亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Linux Shell > 正文

linux下使用perl獲取本機ip的幾種方法介紹

2020-07-27 19:23:37
字體:
來源:轉載
供稿:網友

在使用 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('a16h16') 
        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的方法,大家有時間可以搜索下相關內容。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美国产第二页| 精品magnet| 成人福利在线观看| 亚洲激情视频在线观看| 亚洲日本aⅴ片在线观看香蕉| 亚洲人成电影在线观看天堂色| 国产日韩在线精品av| 成人97在线观看视频| 日韩电视剧免费观看网站| 成人av资源在线播放| 久久99精品久久久久久噜噜| 国产精品久久久久7777婷婷| 日韩免费av一区二区| 亚洲偷熟乱区亚洲香蕉av| 国内精品久久久久影院优| 色悠悠久久久久| 国产丝袜一区二区| 久久精品91久久久久久再现| 亚洲欧美另类在线观看| 欧美大肥婆大肥bbbbb| 日韩在线视频免费观看| 久久综合免费视频影院| 国产精品一区二区久久久久| 欧美日韩人人澡狠狠躁视频| 久久九九有精品国产23| 亚洲国产成人av在线| 国产成人精品日本亚洲专区61| 九九热精品视频在线播放| 欧美一级大胆视频| 日本道色综合久久影院| 欧美视频在线观看免费网址| 欧美性生活大片免费观看网址| 亚洲视频欧洲视频| 性欧美长视频免费观看不卡| www日韩欧美| 欧美中文字幕在线观看| 深夜福利一区二区| 日韩欧美亚洲一二三区| 亚洲成成品网站| 日韩久久免费电影| 久久精品国产清自在天天线| 不卡av电影院| 欧美亚洲国产视频| 日韩一区二区三区国产| 欧美精品午夜视频| 日韩av在线高清| 久久久女女女女999久久| 国产日韩欧美在线看| 97超级碰碰碰久久久| 久久久亚洲国产天美传媒修理工| 疯狂蹂躏欧美一区二区精品| 成人精品一区二区三区电影免费| 在线播放亚洲激情| 57pao成人国产永久免费| 国产精品扒开腿做爽爽爽的视频| 中文字幕在线国产精品| 欧美激情亚洲国产| 欧美成人精品在线视频| 国产一区二区三区精品久久久| 国产不卡一区二区在线播放| 精品美女永久免费视频| 亚洲视频axxx| 久久久久国色av免费观看性色| 久久久久久久激情视频| 精品久久久一区| 欧美激情一级精品国产| 亚洲日本成人网| 高清欧美电影在线| 中文字幕在线看视频国产欧美| 欧美激情a∨在线视频播放| 日日摸夜夜添一区| 91精品国产乱码久久久久久久久| 国产欧美精品日韩精品| 亚洲一级黄色av| 国产亚洲一区二区在线| 清纯唯美日韩制服另类| 国产精品私拍pans大尺度在线| 亚洲一区二区三区xxx视频| 成人在线视频网| 亚洲欧美日韩中文在线| 国产精品一区专区欧美日韩| 色青青草原桃花久久综合| 欧美成人免费va影院高清| 日日摸夜夜添一区| 欧美性猛交xxxx富婆弯腰| 久久成人精品视频| 国产精品国产亚洲伊人久久| 久久精品国产亚洲精品2020| 91精品国产777在线观看| 久久成年人免费电影| xxx成人少妇69| 亚洲成色999久久网站| 欧美日韩在线免费观看| 亚洲片在线资源| 欧美在线视频一区二区| 欧美日韩日本国产| 国产精品美女在线| 欧美激情高清视频| 亚洲精品理论电影| 亚洲人午夜色婷婷| 国内外成人免费激情在线视频| 日韩欧美一区二区三区久久| 亚洲欧美国产高清va在线播| 日韩欧美国产成人| 在线亚洲欧美视频| 不卡av在线网站| 欧美午夜激情在线| 久久偷看各类女兵18女厕嘘嘘| 亚洲老头同性xxxxx| 亚洲欧美在线x视频| 在线看福利67194| 久久久久久久久久久免费精品| 欧美巨大黑人极品精男| 国产精品视频1区| 国产精品久久婷婷六月丁香| 日韩电影免费在线观看| 成人激情视频在线| 国产精品久久久久久久久久久久| 狠狠躁夜夜躁人人爽天天天天97| 亚洲91精品在线| 高清欧美性猛交| 日本精品va在线观看| 92版电视剧仙鹤神针在线观看| 日韩av网站大全| 亚洲v日韩v综合v精品v| 欧美激情一级欧美精品| 中文字幕亚洲欧美日韩2019| 黑人巨大精品欧美一区免费视频| 亚洲伊人成综合成人网| 欧美日韩一区二区三区在线免费观看| 欧美日韩国产123| 亚州精品天堂中文字幕| 亚洲国产成人一区| 久久精品国产99国产精品澳门| 精品调教chinesegay| 久久精品久久久久久| 欧美黑人性视频| 欧美精品久久久久a| 国产mv免费观看入口亚洲| 国产成人精品电影久久久| 美女撒尿一区二区三区| 欧美不卡视频一区发布| 91视频8mav| 欧美日韩一区二区免费视频| 亚洲一区亚洲二区亚洲三区| 午夜精品一区二区三区在线| 亚洲午夜小视频| 日韩欧美精品在线观看| 欧美另类高清videos| 97免费中文视频在线观看| 黑人精品xxx一区| 国模精品视频一区二区三区| 亚洲成人免费在线视频| 欧美制服第一页| 亚洲欧洲美洲在线综合| 成人高h视频在线| 91福利视频网| 亚洲精品欧美日韩专区| 国产精品综合不卡av| 色综合亚洲精品激情狠狠| 欧美性xxxxhd| 日韩激情视频在线播放| 亚洲免费电影在线观看| 午夜精品理论片|