簡體   English   中英

python 從 ip 獲取主域名

[英]python get primary domain name from ip

我需要從 ip 獲取主域名。 我對gethostbyaddrgetfqdn等函數的工作方式有些懷疑。

在以下示例中,我將反轉 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

似乎gethostbyaddrgetfqdn都返回了 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.comgoogle.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM