是否有標準的命令列工具來進行主機名稱查找?

是否有標準的命令列工具來進行主機名稱查找?

我在 shell 中,我想知道主機名稱對應的 IP 位址。

我知道我可以透過 Perl、PHP、Python 或許多其他腳本語言(甚至可能是 awk!)來獲取它,這將是我的解決方法,但令我驚訝的是似乎沒有命令列工具可以做到這一點,沒有簡單的包裝getaddrinfo()

我錯了嗎?有嗎?hostdig並且getent不算,我想要一些使用 libc 並根據/etc/nsswitch.conf,以及默認情況下可能安裝在任何(linux)系統上的東西。

從搬到這裡https://stackoverflow.com/questions/20211326/is-there-a-standard-command-line-tool-to-do-a-hostname-lookup

答案:我錯了,getent並不專門查找/etc/hosts,它實際上進行了正確的查找。

答案1

進行主機名稱查找的傳統工具是bind 中的nslookup,但它正在被dig 取代。這兩個工具都是特定於 dns 的,並且不使用 nsswitch。 getent Hosts 使用 nsswitch,但使用較少。

答案2

getent無疑是適合這項工作的工具,但不幸的是它並不是在任何地方都可用,原因之一是 POSIX 不強制要求未定義它。

另一方面,雖然標準沒有指定它,但arp它不太可能在任何進行名稱解析的伺服器上不可用。如下設置,僅使用arp,在任何 Linux/Unix 系統上可用,並提供在實現之間似乎一致的輸出,解析其輸出即可完成工作:nsswitch.conflibc

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

以下是使用此方法的 shell 函數,避免了 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/).*$//'
  )
}

相關內容