Bash 스크립트에서 호스트 이름을 IP 주소로 어떻게 확인할 수 있습니까?

Bash 스크립트에서 호스트 이름을 IP 주소로 확인하는 가장 간결한 방법은 무엇입니까? Arch Linux .

댓글

  • getent <ahosts|ahostsv4|ahostsv6|hosts> <hostname> 답변이 부끄럽습니다. 바닥 근처 어딘가에 있습니다. ‘ 가장 간단하고 추가 패키지가 필요하지 않으며 Bash 스크립트에서도 구문 분석이 더 쉽습니다 .
  • @ 0xC0000022L : 새로운 수치는 somehostsomehost이 실행할 때 getent hosts somehost를 제안한다는 것입니다. / div> 는 대부분의 다른 도구와는 다른 IPv6 주소 를 생성합니다 (ping, ssh 적어도) 이름을 확인하고 일부를 깨뜨립니다. hosts 대신 ahosts를 사용하세요.
  • @j_random_hacker : 특별히 IPv4를 요청하지 못하도록하는 사람 (ahostsv4) 또는 IPv6 (ahostsv6) 주소? 개인적으로 나는 IPv6를 반환하는 불특정 요청에 아무런 문제가 없다는 것을 발견했습니다. 코드를 준비해야합니다. IPv6는 이제 20 년 이상 사용되었습니다.
  • @ 0xC0000022L : 아무도 ” 나를 ” 하지만 답변은 구체적으로 hosts를 암시하며 지금까지 4 명이 iv로 인한 고통을 표현하는 vinc17 ‘의 댓글을 찬성했습니다. id = “249a1af967”>

갑자기 IPv6 “. IPv6에 대한 준비가 항상 문제는 아닙니다. 많은 프로그램은 두 이름 / 주소가 동일한 호스트를 참조하는지 여부를 확인하는 방법이 필요합니다. 간단한 문자열 일치를 사용하거나 ” true ” 답변을 찾기 위해 네트워크에 대해 많이 알고 있어야합니다. 후자는 지뢰밭이므로 내가 제어 할 수없는 많은 타사 프로그램 및 시스템이 전자를 사용합니다.

답변

glibc와 함께 제공되는 getent를 사용할 수 있습니다 (따라서 거의 Linux에 있음). . 이는 gethostbyaddr / gethostbyname2를 사용하여 해결되므로 /etc/hosts / NIS / etc :

getent hosts unix.stackexchange.com | awk "{ print $1 }" 

또는, Heinzi가 아래에서 말했듯이 +short 인수와 함께 dig를 사용할 수 있습니다 (DNS 서버를 직접 쿼리하고 / NSS / etc) :

dig +short unix.stackexchange.com 

dig +short를 사용할 수없는 경우 모두 다음 중 작동해야합니다. 다음은 모두 DNS를 직접 쿼리하고 다른 확인 수단을 무시합니다.

host unix.stackexchange.com | awk "/has address/ { print $4 }" nslookup unix.stackexchange.com | awk "/^Address: / { print $2 }" dig unix.stackexchange.com | awk "/^;; ANSWER SECTION:$/ { getline ; print $5 }" 

하나의 IP 만 인쇄하려면 명령을 awk“의 워크 플로에 추가합니다.

dig +short unix.stackexchange.com | awk "{ print ; exit }" getent hosts unix.stackexchange.com | awk "{ print $1 ; exit }" host unix.stackexchange.com | awk "/has address/ { print $4 ; exit }" nslookup unix.stackexchange.com | awk "/^Address: / { print $2 ; exit }" dig unix.stackexchange.com | awk "/^;; ANSWER SECTION:$/ { getline ; print $5 ; exit }" 

댓글

  • 기본적으로 dig 사용은 ipv4에서만 작동합니다. 여기서 host는 ipv4 및 ipv6 응답을 모두 제공합니다. 이는 예상치 못한 결과 일 수 있습니다. host www.google.com, dig +short www.google.com, host ipv6.google.com, dig +short ipv6.google.com, host www.facebook.com , dig +short www.facebook.com.
  • DIG가 작동하지 않으며 CNAME 인 경우 IP를 반환하지 않습니다.
  • 때로는 host는 시간 초과 될 수 있으며 아무 것도 반환하지 않습니다. 일부 도메인의 경우 dig +short가 첫 번째 줄에 도메인 별칭을 반환 할 수 있습니다. 따라서 출력이 IPv4인지 확인하기 위해 주소는 dig +short example.com | grep -Eo '[0-9\.]{7,15}' | head -1를 사용합니다.
  • instan의 경우 getent hosts <host> 사용이 올바르지 않습니다. ce IPv6가 작동하지 않는 동안 IPv6 주소를 제공 할 수 있습니다. ‘ 올바른 해결책은 getent ahosts <host>를 사용하여 필요한 경우 IPv6 및 IPv4를 모두 시도하는 것입니다.
  • 언급 할만한 가치가있는 것은 host, dig 및 nslookup이 나열된 서버와 직접 통신하는 것 같습니다. resolv.conf에서는 ” 가져온 호스트 “가 활성화 된 경우 로컬 호스트 파일과 라이브러리 수준 캐싱 (예 : nscd)을 모두 존중합니다. .

답변

iv id의 host 사용 = “42fabf6d41”>

dnsutils 패키지 :

$ host unix.stackexchange.com unix.stackexchange.com has address 64.34.119.12 

( 수정 됨 패키지 이름입니다. 참고로 다른 배포판에는 Debian / Ubuntu bind9-host 같은 다른 패키지에 host가 있습니다. / em>, openSUSE bind-utils , Frugalware bind .)

댓글

  • DNS에없는 문제 (예 : / etc / hosts)를 해결해야하는 경우 아래 resolveip 항목을 참조하십시오.
  • host는 때때로 여러 줄 출력을 반환합니다 (리디렉션의 경우). ‘ host unix.stackexchange.com | tail -n1 IP 주소가있는 줄만 원하는 경우.
  • 출력 형식이 다른 여러 버전의 ” host “가 있습니다. 예 : 대부분의 시스템에는 BIND9 버전이있는 것 같지만 Ubuntu 10.04 LTS 서버에는 어떻게 든 완전히 다른 버전이 있습니다.
  • 또는 dig가 설치되어 있으면 대신 항상 사용 가능한 ping을 사용할 수 있습니다. ping unix.stackexchange.com -c 1 -q 2>&1 | grep -Po "(\d{1,3}\.){3}\d{1,3}" 이것은 필요하지 않습니다. 추가 패키지는 대부분의 유닉스 / 리눅스 매치 인에 설치됩니다.

  • 이 답변은 심각한 반대 투표를받을 가치가 있습니다. host는 DNS 도구 (nslookup와 유사)이므로 DNS의 호스트 만 조회합니다. /etc/hosts. 따라서 OP ‘의 질문에 대한 답변이 아닙니다 .

답변

내 컴퓨터에 작업을 수행하는 도구가 있습니다. man 페이지는 mysql과 함께 제공되는 것으로 보입니다 … 사용 방법은 다음과 같습니다.

resolveip -s unix.stackexchange.com 64.34.119.12 

이 도구의 반환 값이 0과 다릅니다. 호스트 이름을 확인할 수없는 경우 :

resolveip -s unix.stackexchange.coma resolveip: Unable to find hostid for "unix.stackexchange.coma": host not found exit 2 

업데이트 fedora에서는 mysql-server와 함께 제공됩니다.

yum provides "*/resolveip" mysql-server-5.5.10-2.fc15.x86_64 : The MySQL server and related files Dépôt : fedora Correspondance depuis : Nom de fichier : /usr/bin/resolveip 

스크립트에 대해 이상한 종속성을 생성 할 것 같습니다 …

댓글

  • 여기에서 OS ‘의 빌드 인 리졸버를 사용하는 유일한 솔루션 인 것 같습니다. / etc / hosts 및 DNS.
  • getent 다른 답변에서 자세히 설명했듯이 / etc / hosts도 살펴보고 glibc와 함께 제공됩니다. Linux 시스템에 대한 종속성이 없습니다.
  • 다른 패키지에 대한 종속성을 생성하므로 resolveip를 사용하지 않습니다. getent는 기본적으로 설치됩니다. host, nslookup 및 dig는 모두 선택적 패키지에 있습니다. 스크립트에서 확실히 getent를 사용하세요.
  • 이 답변이 마음에 들지만 ‘ ipv6을 반환하지 않습니다.

Answer

dig를 사용하는 다음 명령을 사용하면 sed / awk / etc없이 직접 결과를 읽을 수 있습니다. 매직 :

$ dig +short unix.stackexchange.com 64.34.119.12 

digdnsutils에 포함됩니다. 패키지.


참고 : dig 이름을 확인할 수없는 경우에도 0의 반환 값이 있습니다. 따라서 반환 값을 확인하는 대신 출력이 비어 있는지 확인해야합니다.

hostname=unix.stackexchange.com ip=`dig +short $hostname` if [ -n "$ip" ]; then echo IP: $ip else echo Could not resolve hostname. fi 

참고 2 : 호스트 이름에 여러 개의 IP 주소가있는 경우 (예 : debian.org 시도) 모두 이 “문제”는 지금까지이 질문에 언급 된 모든 도구에 영향을 미칩니다.

댓글

  • 도메인에 CNAME 항목이있는 경우 해당 도메인은 IP 주소 대신 첫 번째 줄에 인쇄 될 수 있습니다.

답변

getent hosts unix.stackexchange.com | cut -d" " -f1 

댓글

  • 또한 ahosts, ahostsv4, ahostsv6 with getent.
  • cut는 getent ‘는 \t를 사용하여 열을 구분합니다. 이는 Solaris의 경우입니다.
  • @ceving : 솔라에서 ris는 -d없이 cut를 실행해야 할 수도 있습니다 (기본값은 구분자로 \t). Linux에서는 ‘ 공백이므로 위의 줄이 작동합니다.

Answer

지금까지 제공된 솔루션은 대부분 간단한 경우에 작동합니다. 호스트 이름은 단일 IPv4 주소로 직접 확인됩니다. 이것은 호스트 이름을 확인해야하는 유일한 경우 일 수 있지만 그렇지 않은 경우 처리해야 할 몇 가지 경우에 대한 설명입니다.

Chris Down과 Heinzi는 호스트 이름이 확인되는 경우에 대해 간략하게 설명했습니다. 둘 이상의 IP 주소에. 이 경우 (및 아래의 다른 항목) 호스트 이름이 단일 IP 주소로 직접 확인된다는 가정 하의 기본 스크립팅이 중단 될 수 있습니다. 다음은 호스트 이름이 둘 이상의 IP 주소로 확인되는 예입니다.

$ host www.l.google.com www.l.google.com has address 209.85.148.147 www.l.google.com has address 209.85.148.103 www.l.google.com has address 209.85.148.99 www.l.google.com has address 209.85.148.106 www.l.google.com has address 209.85.148.105 www.l.google.com has address 209.85.148.104 

하지만 www.l.google.com ? 여기에서 별칭 사례를 소개해야합니다. 아래 예를 확인해 보겠습니다.

$ host www.google.com www.google.com is an alias for www.l.google.com. www.l.google.com has address 74.125.39.103 www.l.google.com has address 74.125.39.147 www.l.google.com has address 74.125.39.105 www.l.google.com has address 74.125.39.99 www.l.google.com has address 74.125.39.106 www.l.google.com has address 74.125.39.104 

따라서 www.google.com는 IP 주소로 직접 확인되지 않고 자체적으로 여러 IP 주소로 확인되는 별칭입니다. 별칭에 대한 자세한 내용은 여기 를 확인하세요. 물론 별칭에 단일 IP 주소가있는 경우도 가능합니다. , 아래와 같이 :

$ host g.www.ms.akadns.net g.www.ms.akadns.net is an alias for lb1.www.ms.akadns.net. lb1.www.ms.akadns.net has address 207.46.19.190 

하지만 별칭을 연결할 수 있습니까?대답은 예입니다 :

$ host www.microsoft.com www.microsoft.com is an alias for toggle.www.ms.akadns.net. toggle.www.ms.akadns.net is an alias for g.www.ms.akadns.net. g.www.ms.akadns.net is an alias for lb1.www.ms.akadns.net. lb1.www.ms.akadns.net has address 207.46.19.254 $ host www.google.fr www.google.fr is an alias for www.google.com. www.google.com is an alias for www.l.google.com. www.l.google.com has address 74.125.39.147 www.l.google.com has address 74.125.39.103 www.l.google.com has address 74.125.39.99 www.l.google.com has address 74.125.39.106 www.l.google.com has address 74.125.39.104 www.l.google.com has address 74.125.39.105 

호스트 이름이 IP 주소로 확인되지 않는 별칭으로 확인되는 예를 찾지 못했지만 케이스가 발생할 수 있습니다.

여러 IP 주소와 별칭이 다른 특별한 경우가 있습니까? IPv6은 어떻습니까? 시도해 볼 수 있습니다.

$ host ipv6.google.com ipv6.google.com is an alias for ipv6.l.google.com. ipv6.l.google.com has IPv6 address 2a00:1450:8007::68 

여기서 호스트 이름 ipv6.google.com는 IPv6 전용 호스트 이름입니다. 이중 스택 호스트 이름은 어떻습니까?

$ host www.facebook.com www.facebook.com has address 66.220.153.15 www.facebook.com has IPv6 address 2620:0:1c08:4000:face:b00c:: 

IPv6에 대해 다시 말하지만 호스트가 IPv4 전용 인 경우에도 IPv6 주소를 확인할 수 있습니다 (IPv4 전용 WinXP에서 테스트 됨). ipv6.google.com을 사용하면 Linux에서 사용해 볼 수 있습니다). 이 경우 해결은 성공하지만 알 수없는 호스트 오류 메시지 와 함께 ping이 실패합니다. 스크립팅이 실패한 경우 일 수 있습니다.

이 설명이 도움이 되었기를 바랍니다.

댓글

  • 대단합니다. 허용되는 답변을 보완하여 스크립팅에서 다루고 싶은 모든 경우를 보여줍니다. 내 버전 host에는 상자에 ” 주소가 있음 “도 표시되지 않습니다.

li>

답변

별칭 문제를 방지하고 항상 단일 IP 주소를 사용할 수 있도록 준비하려면 :

python -c "import socket; print socket.gethostbyname("www.example.com")" 

댓글

Answer

ping -q -c 1 -t 1 your_host_here | grep PING | sed -e "s/).*//" | sed -e "s/.*(//" 

다른 시스템 (및 / etc / hosts에 지정된 호스트)에 대한 종속성없이 작동합니다.

코멘트

  • 호스트 파일의 값이 필요하지만 sed 패턴이 올바르게 구문 분석되지만 ping이 작동하므로 ping 사용이 필요했습니다. q -c 1 -t 1 your_host_here | grep PING | sed -e ” s / ^ [^ (] * [(] // ” | sed -e ” s / [)]. * $ // ”
  • myhostname.local과 같은 내 홈 네트워크에서 문제를 해결하려면 다음과 같이 작동합니다. 저에게 이것이 최선의 답변입니다.
  • 이것도 제안 해 주시겠습니까? ping -q -c 1 -t 1 bahface.local | grep -m 1 PING | cut -d "(" -f2 | cut -d ")" -f1
  • getent <ahosts|ahostsv4|ahostsv6|hosts> <hostname>/etc/hosts 내부의 선언에도 작동합니다 … 그리고 ‘의 도구 모든 종류의 시스템 데이터베이스 (암호, 그룹, 별칭, 서비스) 용.

답변

간단하지만 유용합니다. :

  1. getent ahostsv4 www.google.de | grep STREAM | head -n 1 | cut -d " " -f 1
  2. getent ahostsv6 www.google.de | grep STREAM | head -n 1 | cut -d " " -f 1
  3. getent hosts google.de | head -n 1 | cut -d " " -f 1

호스트가 여전히 존재하는 경우 모든 명령이 IP 주소를 확인합니다. 호스트가 CNAME을 가리키는 경우 해당 IP도 가져옵니다. case.

첫 번째 명령은 해결 된 IPv4 주소를 반환합니다.

두 번째 명령은 res를 반환합니다. olved IPv6 주소.

세 번째 명령은 소유자의 기본 주소를 반환합니다. 이는 IPv4 또는 IPv6 주소 일 수 있습니다.

댓글

  • 지금까지 가장 간단한 것입니다. 그리고 기본적으로 사용 가능합니다. bindutils

Answer h2를 설치해야하는 host와는 다릅니다. >

다음은 “알 수없는 호스트”를 고려하고 (stderr를 통해 배관하여) iv를 사용하는 ping 접근 방식의 약간 변형입니다. id = “5cf5043eb6”>

sed 정규 표현식 사용을 피하려면 :

ping -c1 -t1 -W0 www.example.com 2>&1 | tr -d "():" | awk "/^PING/{print $3}" 

경우 이탈 값을 캡처하는 것이 중요합니다. 덜 우아하지만 다음이 작동합니다.

ping -c1 -t1 -W0 www.example.com &>/dev/null && ping -c1 -t1 -W0 www.example.com 2>&1 | tr -d "():" | awk "/^PING/{print $3}" 

댓글

  • 추가 도구없이 작동하므로이 솔루션이 마음에 듭니다.

답변

Chris Down의 답변을 완료하고 별칭 (연결되었을 수 있음)에 대한 jfgagne 의견을 처리하기 위해 다음과 같은 솔루션이 있습니다.

  • 여러 IP를 고려
  • 고려 하나 이상의 별칭 (CNAME)
  • /etc/hosts 파일 ( 제 경우에는 원하지 않았습니다. 쿼리하기 위해 dbernt의 파이썬 솔루션이 완벽합니다)
  • awk / sed를 사용하지 않습니다

    dig +short www.alias.com | grep -v "\.$" | head -n 1 

항상 첫 번째 IP 주소를 반환하거나 해결되지 않은 경우 빈 tring을 반환합니다. 버전 dig :

 $ dig -v DiG 9.8.1-P1 

댓글

  • 감사합니다. 다른 답변은 ” dig + short ” 항상 이 반환된다고 가정합니다. 단일 IP 주소. ‘ CNAME을 설명하지 않았습니다.

답변

 php -r "echo gethostbyname("unix.stackexchange.com");" 

댓글

  • 작동하지만 터미널에 PHP가 설치되어 있어야합니다.
  • ” host “, ” dig ” 등은 사용할 수 없습니다.

Answer

Answer McGregor Re : ping에 댓글로 추가하고 싶었습니다. 그러나 그것은 나를 허용하지 않을 것이므로 이것을 다른 대답으로 추가해야합니다. (누군가 주석으로 이동할 수 있다면 자유롭게하십시오.)

이것은 ping과 grep 만 사용하는 또 다른 변형입니다. :

ping -q -c1 -t1 your_host_here | grep -Eo "([0-9]+\.?){4}" 

grep -E (확장 정규 표현식) 및 grep -o 일치하는 부분 만 반환합니다. 정규 표현식 자체는 하나 이상의 숫자 ([0-9]+)와 선택적으로 점 (\.?)을 네 번 찾습니다 ( {4})

답변

:

hostname=example.org # strips the IP IP=$( host ${hostname} | sed -e "s/.*\ //" ) # checks for errors if [ $? -ne 0 ] ; then echo "Error: cannot resolve ${hostname}" 1>&2 exit 1; fi 

답변

여기 “에서 Bash 레시피 다른 사람들의 답변을 사용하여 요리했습니다. 먼저 /etc/hosts를 시도한 다음 nslookup으로 돌아갑니다.

 resolveip(){ local host="$1" if [ -z "$host" ] then return 1 else local ip=$( getent hosts "$host" | awk "{print $1}" ) if [ -z "$ip" ] then ip=$( dig +short "$host" ) if [ -z "$ip" ] then echo "unable to resolve "$host"" >&2 return 1 else echo "$ip" return 0 fi else echo "$ip" return 0 fi fi }  

댓글

  • 명확하게 말하면 getent hosts는 ‘ / etc / hosts의 조회가 아닙니다. ‘ gethostbyaddr (3) , ‘ dig 아주 적습니다. / div> 성공합니다. getent에 대한 매뉴얼 페이지 를 참조하세요.
  • @Stuart가 맞습니다 — 저는 ‘ 배웠습니다. 그것을 작성하고 강력한 명령을 지나치게 단순화 한 이후로 많은 일이 발생했습니다. getent는 여전히 가장 좋아하지만 dig +short

Answer

nmap -sP 192.168.178.0/24|grep YOUR_HOSTNAME|sed -n "s/.*[(]\([0-9\.]*\)[)].*/\1/p" 

DNS 서버없이 찾은 솔루션

답변

가장 간결하지는 않지만 강력하고 효율적인 것 같습니다.

# $(get_host_dns_short "google.com") # # Outputs the IPv4 IP Address of a hostname, resolved by DNS. Returns 0 if DNS # responded successfully; 1 otherwise. Will mask error output. function get_host_dns_short() { ( set -o pipefail host -4 -W1 -t A "$1" 2>/dev/null | awk "/has address/ { print $NF; exit }" ) && return 0 || return 1 } 

이것은 단일 IPv4를 출력합니다. IP, 실패시 1를 반환하고 stderr 출력을 마스킹합니다.

다음과 같이 사용할 수 있습니다.

GOOGLE_IP="$(get_host_dns_short "google.com")" if [[ $? -eq 0 ]]; then echo "Google"s IP is ${GOOGLE_IP}." else echo "Failed to resolve Google"s IP." fi 

Google의 IP는 216.58.192.46입니다.

대신 IPv6 주소를 원하면 -4-6로 바꾸세요.

답변

dig +noall +answer +nocomments example.com | awk "{printf "%-36s\t%s\n", $1, $5 }"

댓글

  • 그 대답이 이미 존재하는 것보다 향상되는 방식으로 어떤 맥락에서 훌륭해. 또한 명령을 공백 4 개로 들여 쓰기하십시오 (마크 다운 구문 참조).

Answer

dig도 마찬가지입니다. 느리고 nslookup이 훨씬 빠릅니다.

nslookup google.com | grep -Po "Address:\s*[0-9.]+" | tail -1 | sed -e "s/Address:\s*//g" 

답변

1 줄은 목록을 해결합니다. 호스트 이름의

for LINE in `cat ~/Desktop/mylist`; do a=$(nslookup $LINE | awk "/^Address: / { print $1 }"); echo $a >> ~/Desktop/ip; done 

답변

getent가없는 Mac. ping는 해킹처럼 보입니다. /etc/hosts도 고려하고 싶습니다.

그래서 저는 dns.lookup에 대한 멍청한 래퍼를 작성했습니다. CLI를 제공하기 위해 Node.js를 설치 한 사용자 :

$ npm install -g lookup-hostname $ lookup google.com 62.243.192.89 

댓글

  • 60 % 확률 결의에 다 다르기 전에 깨지는 것입니다.
  • @dotbit 자세히 설명해 주시겠습니까? 저는 ‘ ‘ 17 년 이후로 이번 주마다 사용했으며 문제가 없었습니다.
  • @Jensen하지만 당신은 ‘ 유일합니다. 나머지는 일반적으로 한 종류 또는 다른 종류의 FAIL에 직면합니다.
  • ” 언제나 그렇듯이 ” 그게 무슨 뜻입니까? ” 나머지 ” ‘ ? ” FAIL이 발생했습니다. ” 어떤 특정 문제가 발생합니까? ‘ 호기심이 많습니다.

답변

동의합니다. ” bash-script에 대한 가장 쉬운 방법을 알고 있지만 호스트 이름을 확인하고 호스트가 작동 중인지 확인하려면 ping를 사용하십시오!

ping -a hostname -c 1 

호스트를 한 번 ping하고 호스트 이름을 IP 주소로 확인합니다.

$ ping -a www.google.com -c 1 PING www.google.com (216.58.211.132) 56(84) bytes of data. 64 bytes from arn09s10-in-f4.1e100.net (216.58.211.132): icmp_seq=1 ttl=54 time=1.51 ms 

댓글

  • Ping을 사용하는 것은 모든 사람이 가지고 있지만 스크립트에서 사용하려는 경우 출력에서 IP 부분을 필터링합니다.

Answer

예, 이미 많은 답변이 있지만 perl을 사용하는 솔루션이 없습니다.

perl -MSocket -MNet::hostent -E "say inet_ntoa((gethost shift)->addr)" unix.stackexchange.com 

bash 스크립트에서는 다음과 같이 사용할 수 있습니다.

#!/bin/bash ipaddr=$(perl -MSocket -MNet::hostent -E "say inet_ntoa((gethost shift)->addr)" unix.stackexchange.com) echo $ipaddr 

여기에 사용 된 모듈은 핵심 모듈이므로 CPAN을 설치하지 않고도 어디서나 사용할 수 있습니다.

댓글

  • perl -MSocket -MNet::hostent -E 'say inet_ntoa((gethost shift)->addr)' unix.stackexchange.com 2>/dev/null가 훨씬 깔끔합니다. 하지만 우리 둘 외에는 아무도 p ö rl을 사용하고 있으며 다른 사람들은 물론 Pascal Script를 사용합니다.
  • 실제로는 오류 메시지가 표시되는 것을 선호합니다. 잘못되다. Can't call method "addr" on an undefined value는 ‘ 정확히 최상의 오류 메시지는 아니지만 문제에 대한 힌트를 제공 할 수 있습니다.

답변

#!/bin/bash systemd-resolve RT.com -t A | awk "{ print $4 ; exit }" systemd-resolve unix.stackexchange.com -t A --legend=no | awk "{ print $4 ; exit }" resolveip -s RT.com dig +short RT.com host RT.com | awk "/has address/ { print $4 }" nslookup RT.com | awk "/^Address: / { print $2 }" ping -q -c 1 -t 1 RT.com | grep PING | sed -e "s/).*//" | sed -e "s/.*(//" ruby -rresolv -e " print Resolv.getaddress "RT.com" " python2 -c "import socket; print socket.gethostbyname("RT.com")" perl -MSocket -MNet::hostent -E "say inet_ntoa((gethost shift)->addr)" RT.com 2>/dev/null php -r "echo gethostbyname( "RT.com" );" echo " all do work for me - take your pick! " 

댓글

  • 루비 버전은 IP 주소 주위에 따옴표를 인쇄합니다. — 아마도 p 대신 print를 사용해야합니다.
  • thx, @Slaven Rezic 및 자유롭게 upvote하십시오. 다시, 여기 하단에서 스크립트가 실제로 더 잘 보일 수 있습니다 …;-)

답변

host -t a cisco.com 

이 명령은 IP 주소를 표시합니다 (도메인을 IP로 다시 등록 함)

답변

위의 솔루션 외에도 아래 스크립트를 통해 여러 호스트 이름을 ip로 변환 할 수 있습니다. 유일한 종속성은 코어 Unix에서 “ping”명령입니다.

getip(){ ping -c 1 -t 1 $1 | head -1 | cut -d " " -f 3 | tr -d "()" 2>&1 | tee >> /tmp/result.log & } getip "hostname.number1.net" getip "hostname.number2.net" getip "hostname.number3.net" getip "hostname.number4.net" getip "hostname.number5.net" getip "hostname.number6.net" getip "hostname.number7.net" getip "hostname.number8.net" 
$ cat /tmp/result.log ABC.DEF.GHI.XY1 ABC.DEF.GHI.XY2 ABC.DEF.GHI.XY3 ABC.DEF.GHI.XY4 ABC.DEF.GHI.XY5 ABC.DEF.GHI.XY6 ABC.DEF.GHI.XY7 ABC.DEF.GHI.XY8 

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다