是否有标准的命令行工具来进行主机名查找?

时间:2013-11-26 07:52:13

标签: linux shell

我在shell中,我想知道主机名的相应IP地址。

我知道我可以通过Perl,PHP,Python或其他一些脚本语言(甚至可能是awk!)得到它,这将是我的解决方法,但我很惊讶似乎没有命令行工具要做到这一点,getaddrinfo()没有简单的包装。

我错了吗?有吗? hostgetent不计算,我想要使用libc并根据/etc/nsswitch.conf执行某些操作,以及默认情况下可能安装在任何(linux)系统上的内容。

来自https://superuser.com/questions/681612/is-there-a-standard-command-line-tool-to-do-a-hostname-lookup的答案:getent hosts确实完全按照我的意愿行事,而不仅仅是/etc/hosts查询。

4 个答案:

答案 0 :(得分:1)

一种方法是利用arp设置之后的nsswitch.conf,仅使用libc并且可在任何Linux / Unix系统上使用,例如:

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

这是一个使用此方法的shell函数,它也解决了clacke报告的问题:

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/).*$//'
  )
}

答案 1 :(得分:1)

您可以使用dig命令:

$ dig stackoverflow.com
; <<>> DiG 9.8.4-rpz2+rl005.12-P1 <<>> stackoverflow.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 45432
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;stackoverflow.com.             IN      A

;; ANSWER SECTION:
stackoverflow.com.      197     IN      A       198.252.206.16

;; Query time: 26 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Tue Nov 26 09:28:10 2013
;; MSG SIZE  rcvd: 51

正如您所看到的那样,开头只有一行没有;,因此有可能grep它并通过构建管道来获取IP地址:

$ dig stackoverflow.com | grep -e "^[^;]" | tr -s " \t" " " | cut -d" " -f5
198.252.206.16

答案 2 :(得分:0)

最简单的方法是使用resolveip命令

#resolveip -s hostname

或使用最常用的命令:ping

#ping -c 1 hostname | cut -d " " -f 3 | egrep 1

答案 3 :(得分:0)

nslookup怎么样?

$ nslookup stackoverflow.com
Server:     8.8.8.8
Address:    8.8.8.8#53

Non-authoritative answer:
Name:   stackoverflow.com
Address: 198.252.206.16