首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从完整的域名中查找国家

从完整的域名中查找国家
EN

Stack Overflow用户
提问于 2017-07-14 17:05:17
回答 1查看 2.9K关注 0票数 3

我正在写一个脚本来分析域名列表的国家(例如third.second.first)。数据集非常陈旧,许多完全限定的域名无法通过python中的socket.gethostbyname(domain_str)找到。以下是我想出的一些替代方案:

  1. 如果无法找到second.first的ip,则检索third.second.first的ip,然后查找该ip 的国家
    • 这似乎不是个好主意,因为dns A记录可以将子域映射到与其主域不同的ip。

  1. 检测域名的国家代码。如果它是..jp,它来自日本

我的问题是:

  • 第一种方法可以接受吗?
  • 是否有其他方法检索域名的国家信息?

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-14 17:11:29

我建议使用geolite2模块:

https://pypi.python.org/pypi/maxminddb-geolite2

所以你可以这样做:

代码语言:javascript
复制
#!/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()

输出:

代码语言:javascript
复制
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
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45108293

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档