我正在编写一个脚本来分析域名列表的国家(例如 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/

    10-12 21:37