我正在编写一个脚本来分析域名列表中的国家(例如 third.second.first
)。数据集很旧,许多完全限定的域名无法通过 python 中的 socket.gethostbyname(domain_str)
找到。以下是我提出的一些替代方案:
- 检索
second.first
的 ip 如果third.second.first
的 ip 找不到然后找那个ip的国家- 这似乎不是一个好主意,因为 dns A 记录可以将子域映射到与其主域不同的 ip。
- 检测域名的国家代码。例如如果是..jp,就是来自日本
我的问题是:
- 第一种方法可以接受吗?
- 是否有其他方法可以检索域名的国家信息?
谢谢。
最佳答案
我建议使用 geolite2
模块:
所以你可以这样做:
#!/usr/bin/python
import socket
from geolite2 import geolite2
def origin(ip, domain_str, result):
print("{0} [{1}]: {2}".format(domain_str.strip(), ip, result))
def getip(domain_str):
ip = socket.gethostbyname(domain_str.strip())
reader = geolite2.reader()
output = reader.get(ip)
result = output['country']['iso_code']
origin(ip, domain_str, result)
with open("/path/to/hostnames.txt", "r") as ins:
for domain_str in ins:
try:
getip(domain_str)
except socket.error as msg:
print("{0} [could not resolve]".format(domain_str.strip()))
if len(domain_str) > 2:
subdomain = domain_str.split('.', 1)[1]
try:
getip(subdomain)
except:
continue
geolite2.close()
输出:
bing.com [204.79.197.200]: US
dd15-028.compuserve.com [could not resolve]
compuserve.com [149.174.98.149]: US
google.com [172.217.11.78]: US
关于python - 从完整域名中查找国家,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45108293/