[英]python get primary domain name from ip
我需要從 ip 獲取主域名。 我對gethostbyaddr和getfqdn等函數的工作方式有些懷疑。
在以下示例中,我將反轉 ip 一個隨機域,然后嘗試取回域名:
import socket
domain = 'heroku.com'
# get ip from domain
ip = socket.gethostbyname(domain)
print('ip =', ip)
# get domain from ip
print(socket.gethostbyaddr(ip))
print(socket.getfqdn(ip))
# OUTPUT
# ip = 50.19.85.154
# ('ec2-50-19-85-154.compute-1.amazonaws.com', ['154.85.19.50.in-addr.arpa'], ['50.19.85.154'])
# ec2-50-19-85-154.compute-1.amazonaws.com
似乎gethostbyaddr
和getfqdn
都返回了 AWS 上負載平衡 ec2 之一的公共 DNS。 我的問題是為什么他們不返回域heroku.com
這可能是在 Route53 上注冊的域?
google.com
的另一個例子:
import socket
domain = 'google.com'
# get ip from domain
ip = socket.gethostbyname(domain)
print('ip =', ip)
# get domain from ip
print(socket.gethostbyaddr(ip))
print(socket.getfqdn(ip))
# OUTPUT
# ip = 216.58.208.174
# ('mil07s10-in-f14.1e100.net', ['174.208.58.216.in-addr.arpa', 'lhr25s09-in-f14.1e100.net', 'lhr25s09-in-f174.1e100.net'], ['216.58.208.174'])
# mil07s10-in-f14.1e100.net
在這里,他們似乎再次返回 GCP 上某些機器的公共 DNS。 如何從 ip 地址獲取真正的主域名( heroku.com
和google.com
示例)
當我們對主機名進行 DNS 查找時,在大多數情況下,我們會返回CNAME
。 我們采用該CNAME
,並進一步解析它以獲得 IP。 但是第 (n-1) 階段的多個CNAME
可以映射到第 (n) 階段的CNAME
。 因此,從后期的CNAME
中取回CNAME
並非易事。
好吧,現在討論從 DNS 移開,但我希望它對您有所幫助。 互聯網上的每個路由器或節點都映射到一個自治系統,並且有一些組織或站點維護這個映射數據庫。 因此,通過擁有 IP,我們可以聯系一個這樣的數據庫以獲取其自治系統編號 (ASN) 和節點所屬的組織。 whois.cymru.com:43
就是這樣一個站點。 您可以使用像nc
這樣的簡單網絡客戶端來查詢其數據庫。 下面我附上了一個這樣的查詢的截圖。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.