Python:如何从FQDN获取IP地址

5 投票
3 回答
7698 浏览
提问于 2025-04-16 09:34

如果我有一个完整的域名,比如 www.google.com,我该怎么找到它对应的IP地址呢?

3 个回答

0

使用 socket.gethostbyname(hostname) 来查看具体内容,详细信息可以参考这个链接:http://docs.python.org/library/socket.html#socket.gethostbyname

6

你可以使用 socket.getaddrinfo。这个方法会给你与某个名字相关的不同IP地址,还可以提供IPv6地址。

根据文档:

>>> import socket
>>> help(socket.getaddrinfo)
Help on built-in function getaddrinfo in module _socket:

getaddrinfo(...)
    getaddrinfo(host, port [, family, socktype, proto, flags])
        -> list of (family, socktype, proto, canonname, sockaddr)

    Resolve host and port into addrinfo struct.
>>> from pprint import pprint
>>> pprint(socket.getaddrinfo('www.google.com', 80))
[(2, 1, 6, '', ('74.125.230.83', 80)),
 (2, 2, 17, '', ('74.125.230.83', 80)),
 (2, 3, 0, '', ('74.125.230.83', 80)),
 (2, 1, 6, '', ('74.125.230.80', 80)),
 (2, 2, 17, '', ('74.125.230.80', 80)),
 (2, 3, 0, '', ('74.125.230.80', 80)),
 (2, 1, 6, '', ('74.125.230.81', 80)),
 (2, 2, 17, '', ('74.125.230.81', 80)),
 (2, 3, 0, '', ('74.125.230.81', 80)),
 (2, 1, 6, '', ('74.125.230.84', 80)),
 (2, 2, 17, '', ('74.125.230.84', 80)),
 (2, 3, 0, '', ('74.125.230.84', 80)),
 (2, 1, 6, '', ('74.125.230.82', 80)),
 (2, 2, 17, '', ('74.125.230.82', 80)),
 (2, 3, 0, '', ('74.125.230.82', 80))]

注意:gethostbyname 在C语言中已经不推荐使用(而Python中的 socket.gethostbyname 是基于它实现的),因为它不支持IPv6地址,所以推荐使用 getaddrinfo 作为替代。

7

最简单的方法就是使用 socket.gethostbyname() 这个函数。

撰写回答