링크 ux 에서 perl 을 사용 하여 이 컴퓨터 ip 를 가 져 오 는 몇 가지 방법 에 대한 소개
그럼 어떻게 worker 스 크 립 트 에서 이 컴퓨터 ip 을 func 로 가 져 옵 니까?
첫 번 째 방법,가장 간단 한 것 은 셸 을 호출 합 니 다
$ip = `ifconfig eth0|grep -oE '([0-9]{1,3}\.?){4}'|head -n 1`;
주:여기 입력 은 고정 되 어 있 기 때문에 간단 한[0-9]{1,3}입 니 다.웹 프로그램 등에 서 ip 을 검증 하려 면 더욱 엄밀 해 야 합 니 다!또는:
$ip = `ifconfig eth0|awk -F: '/inet addr/{split($2,a," ");print a[1];exit}'`;
그래,이 건 너무 perl 이 아 닌 것 같 고 외부 셸 을 자주 호출 하 는 것 도 좋 지 않 아.두 번 째:
open FH,"ifconfig eth0|";
while(<FH>){
last unless /inet addr:((\d{1,3}\.?){4})/;
print $1;
}
약간 perl 된 것 같 습 니 다.실질 적 으로 위의 호출 셸 과 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-eth 0 인지/etc/network/interfaces 인지 확인 한 다음 발행 판 에 따라 다른 처리 방법 을 쓰 시 겠 습 니까?좋 습 니 다.여러분 은 CPAN 의 매력 을 충분히 체험 하고 검색 해서 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 명령 을 통 해 알 수 있 듯 이 Liux 는 실질 적 으로 ioctl 명령 을 통 해 완 성 된 네트워크 인터페이스 ip 를 통 해 가 져 옵 니 다.그럼 우리 도 ioctl 로 하면 돼!
여섯 번 째 종 류 는 다음 과 같다.
4.567913.이러한 장점 은 핵심 모듈 만 호출 하고 스 크 립 트 를 배포 할 때 다른 모듈 을 설치 하지 않 아 도 된다 는 것 이다.
주:이것 은 사실 인터넷 에 있 는 py 스 크 립 트 에 따라 수정 한 것 입 니 다.
py 판 은 다음 과 같 습 니 다.
#!/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");
2012 년 12 월 19 일 증가:logstash 의 input/file.rb 를 찾 았 습 니 다.ruby 버 전:
#!/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')
하지만 puppet 에 서 는 ifconfig 방법 으로 시간 이 있 으 면 관련 내용 을 검색 할 수 있 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
File::Temp를 사용하여 Perl에서 잠금 파일 만들기retrieve 명령은 "perl"이라는 단어에 대한 DuckDuckGo 검색의 HTML을 검색하여 $HOME/duckduckperl.html 에 쓰고 이미 있는 경우 이 파일을 덮어씁니다. print 명령은 $HO...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.