호스트 이름에서 IP 주소를 얻는 가장 쉬운 방법은 무엇입니까?
나는 시도 ping
하고 출력에서 구문 분석 하는 것에 대해 생각하고있었습니다 . 그러나 이는 그리 좋지는 않으며 모든 시스템에서 동일한 방식으로 작동하지 않을 수 있습니다.
나는 약간의 주변을 검색하고로 솔루션을 찾았 nslookup
지만의 호스트 이름에는 작동하지 않습니다 /etc/hosts
.
호스트 이름에서 IP 주소를 얻는 가장 쉬운 방법은 무엇입니까?
나는 시도 ping
하고 출력에서 구문 분석 하는 것에 대해 생각하고있었습니다 . 그러나 이는 그리 좋지는 않으며 모든 시스템에서 동일한 방식으로 작동하지 않을 수 있습니다.
나는 약간의 주변을 검색하고로 솔루션을 찾았 nslookup
지만의 호스트 이름에는 작동하지 않습니다 /etc/hosts
.
답변:
표준 시스템 호출로이를 수행 할 수 있습니다. Perl의 예는 다음과 같습니다.
use strict; use warnings;
use Socket;
use Data::Dumper;
my @addresses = gethostbyname('google.com');
my @ips = map { inet_ntoa($_) } @addresses[4 .. $#addresses];
print Dumper(\@ips);
출력을 생성합니다.
$VAR1 = [
'74.125.127.104',
'74.125.127.103',
'74.125.127.105',
'74.125.127.106',
'74.125.127.147',
'74.125.127.99'
];
(명령 줄에서 다음과 같은 스크립트를 작성할 수 있습니다. perl -MSocket -MData::Dumper -wle'my @addresses = gethostbyname("google.com"); my @ips = map { inet_ntoa($_) } @addresses[4 .. $#addresses]; print Dumper(\@ips)'
)
다른 언어에서도 이와 유사하게이 작업을 수행 할 수 있습니다 man -s3 gethostbyname
.
perl -MSocket -MData::Dumper -wle'my @addresses = gethostbyname("www.google.com"); my @ips = map { inet_ntoa($_) } @addresses[4 .. $#addresses]; print $ips[0]'
.
sed -e '/some people consider Perl a better form/s/better/worse/'
SCNR
host <hostname>
전의:
serv ~ $ host stackoverflow.com
stackoverflow.com has address 69.59.196.211
Linux (및 일부 OS X 변형)에서는 resolveip
MySQL 서버 패키지의 일부인 을 사용할 수 있습니다 .
/etc/hosts:
...
127.0.0.1 localhost localhost.localdomain foo
...
serv ~ $ resolveip foo
IP address of foo is 127.0.0.1
/etc/hosts
)을 시도하십시오 host localhost
.
resolveip
기본적으로 데비안에는 설치되어 있지 않습니다.
이 고대 게시물에는 많은 창의적인 솔루션이있는 것 같습니다.
/etc/hosts
액세스 권한이 있는지 확인 해야하는 경우 사용하는 경향이 있습니다.
getent hosts somehost.com
적어도`/etc/nsswitch.conf '가 파일을 사용하도록 설정되어 있다면 (정상적으로) 작동합니다.
ahosts
여러 줄 정보를 반환 하지만 아무것도 반환하지 않는다는 점에 흥미가 있습니다.
IPv4의 경우 / etc / hosts를 포함한 리졸버를 사용하여 기본적으로 작동하는 표준 프로그램이 있습니다.
host="localhost"
ip="`gethostip -d "$host"`"
데비안의 일부이므로 다음과 같이 설치하십시오 :
apt-get install syslinux
IPv6과 같은 IPv4 이외의 다른 프로토콜의 경우 현재 비슷한 도구를 모릅니다. 업데이트 : 이것 때문에 IPv6를 해결할 수있는 작은 도구를 작성했습니다.
https://github.com/hilbix/misc/blob/master/src/ipof.c
그것은 빠르고 더러운 쉘 사용을 위해 생각 gethostip
되지만 IPv6도 허용합니다.
ip="`ipof -6 -- heise.de`"
또한 다음과 같이 대화식으로 사용할 수 있습니다.
ipof -a -d -x -v -h -
HTH
왜 안돼 dig +short hostname
?
(쿼리 DNS)
/etc/hosts
.
글쎄, 내 현재 솔루션 :
ping -c1 -n www.google.com | head -n1 | sed "s/.*(\([0-9]*\.[0-9]*\.[0-9]*\.[0-9]*\)).*/\1/g"
sed
시스템마다 약간 다르게 동작하는 것 같습니다 . :) 얼마나 짜증나. 나는 조금 바꿨다. 지금 어디에서나 작동해야한다고 생각한다.
일부 Unices에서는 다음이 작동합니다.
arp <hostname>
예를 들어 Mac OS X에서 나는 이것을 얻습니다.
arp My-iMac.local
My-iMac.local (192.168.1.2) -- no entry
arp -n hostname
IP를 보여줍니다.
ping
일반적으로 의존성이 높지 않기 때문에 사용하는 것이 그렇게 나쁘지 않습니다.
Linux 시스템에서 사용한 기능은 다음과 같습니다.
getip () { ping -c 1 -t 1 $1 | head -1 | cut -d ' ' -f 3 | tr -d '()' ; }
nmap -sP 192.168.1.0/24|grep SEARCHED_HOSTNAME|sed -n 's/.*[(]\([0-9\.]*\)[)].*/\1/p'