我在shell中,我想知道主机名的相应IP地址。
我知道我可以通过Perl,PHP,Python或其他一些脚本语言(甚至可能是awk!)得到它,这将是我的解决方法,但我很惊讶似乎没有命令行工具要做到这一点,getaddrinfo()
没有简单的包装。
我错了吗?有吗? host
和getent
不计算,我想要使用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
查询。
答案 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