호스트 이름 조회를 수행하는 표준 명령줄 도구가 있습니까?

호스트 이름 조회를 수행하는 표준 명령줄 도구가 있습니까?

나는 쉘에 있고 호스트 이름에 해당하는 IP 주소를 알고 싶습니다.

Perl, PHP, Python 또는 기타 여러 스크립팅 언어(아마도 awk!)를 통해 얻을 수 있다는 것을 알고 있으며 이것이 해결 방법이 될 것이지만 이를 수행할 수 있는 명령줄 도구가 없는 것 같아 놀랐습니다. , 주변에 간단한 래퍼가 없습니다 getaddrinfo().

내가 잘못? 하나 있나요? host, dig그리고 getent계산하지 마십시오. 나는 libc를 사용하고 에 따라 작동하는 것과 /etc/nsswitch.conf기본적으로 모든 (리눅스) 시스템에 설치되는 것을 원합니다.

여기에서 옮김https://stackoverflow.com/questions/20211326/is-there-a-standard-command-line-tool-to-do-a-hostname-lookup

답변: 제가 틀렸습니다. 를 getent단독으로 조회하는 것이 아니라 /etc/hosts실제로 적절한 조회를 수행합니다.

답변1

호스트 이름 조회를 수행하는 기존 도구는 바인드의 nslookup이지만 현재는 dig로 대체되고 있습니다. 두 도구 모두 DNS 전용이며 nsswitch를 사용하지 않습니다. getent 호스트는 nsswitch를 사용하지만 훨씬 덜 사용됩니다.

답변2

getent확실히 작업에 적합한 도구이지만 불행히도 모든 곳에서 사용할 수 있는 것은 아닙니다. 그 이유 중 하나는 POSIX에서 정의를 해제하는 것이 필수가 아니기 때문입니다.

반면에 표준에 지정되어 있지는 않지만 arp이름 확인을 수행하는 서버에서 사용할 수 없을 가능성은 거의 없습니다. arp다음 nsswitch.conf설정 과 같이 libc는 모든 Linux/Unix 시스템에서 사용할 수 있으며 구현 간에 일관성이 있는 것으로 보이는 출력을 제공합니다. 출력을 구문 분석하면 작업이 수행됩니다.

$ arp stackoverflow.com | sed -e 's/.*(//' -e 's/).*$//'
198.252.206.16

다음은 해당 방법을 사용하여 일부 경우에 다른 출력 형식으로 전환하는 Linux arp 관련 문제를 방지하는 셸 함수입니다.

resolve()
{
  : ${1:?Usage: resolve name}
  (
    PATH=$PATH:/usr/sbin
    ao=$(arp $1)
    [ "$(echo "$ao"|grep HWaddress)" ] && ao=$(arp -a $1)
    echo "$ao" | sed -e 's/.*(//' -e 's/).*$//'
  )
}

관련 정보