【问题标题】:How to resolve blockchain dns using Python Requests如何使用 Python 请求解析区块链 dns
【发布时间】:2018-01-04 14:55:59
【问题描述】:

某些区块链域只能由区块链 dns 解析器解析。

例如:http://Jstash.bazar

如果您尝试在浏览器中打开此链接,将无法解决。

但是,只需从https://blockchain-dns.info/ 安装浏览器插件即可 然后尝试再次打开该站点,它会顺利打开。

我想使用 Python 请求(无浏览器)从该站点中删除一些数据,但不知道如何解析此类区块链域。 任何帮助将不胜感激。

【问题讨论】:

    标签: python dns python-requests blockchain


    【解决方案1】:

    您可以使用其公开可用的 api 之一来解析域并获取 ip。您将在 Firefox 或 Chrome 插件脚本的 common.js 中找到 api urls 列表。
    一个python例子,

    import requests
    from random import choice
    
    def domain_ip(domain):
        '''Uses bdns api to resolve domain names'''
        domain = domain.split('/')[2] if '://' in domain else domain
        apis = ['https://bdns.co/r/', 'https://bdns.us/r/', 'https://bdns.bz/r/']
        api = choice(apis)
        r = requests.get(api+domain)
        if r.status_code == 200:
            ip = r.text.splitlines()[0]
            print("Domain: {}  IP: {}".format(domain, ip))
            return ip
        else:
            print('HTTP Error: {}'.format(r.status_code))
    
    ip = domain_ip('http://jstash.bazar')
    if ip:
        r = requests.get('http://'+ip)
    

    域名:jstash.bazar IP:190.115.24.114


    21 年 10 月 20 日更新

    Bdns 离线,我不知道他们是否会回来。我搜索了类似的公共 HTTP API,但找不到一个运行良好的 API。最好可以使用 Dnspython 查询 OpenNIC 服务器。

    import dns.resolver
    import requests
    
    def domain_to_ip(domain, dns_server='159.89.120.99'):
        '''Uses an OpenNIC server to resolve blockchain domains   
    
        :param domain: str Domain or URL  
        :param dns_server: str Optional, OpenNIC server  
        :raises dns.resolver.NXDOMAIN: if `dns_server` fails to resolve `domain`
        '''
        if '://' in domain:
            domain = domain.split('/')[2]
            
        res = dns.resolver.Resolver()
        res.nameservers = [dns_server]
        answers = res.resolve(domain)
    
        return [rdata.address for rdata in answers]
    
    
    ips = domain_to_ip('http://track2.bazar')
    if ips:
        r = requests.get('https://'+ips[0], verify=False)
        print(r)
    

    需要
    dnspython,https://www.dnspython.org/
    一个 OpenNIC dns_server, https://servers.opennicproject.org/
    并且没有 SSL 验证verify=False

    非常感谢@VincentAlex 注意到这个问题并提出了解决方案。

    【讨论】:

    • 已下线bdns.io/r/nx.bit
    • @VincentAlex 谢谢。我做了一些研究,发现了一个来自 peername.org 扩展的 API。但它不是那么好,它不支持.bazar,有时它会返回HTTP 403。有没有更好的选择?
    • openNIC 似乎支持大多数开箱即用的区​​块链,使用这个库我们可以查询一个 dns 服务器(需要 IP 而不是域)pypi.org/project/dnspython
    • @VincentAlex 好主意,再次感谢
    猜你喜欢
    • 2012-06-15
    • 1970-01-01
    • 2019-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-19
    相关资源
    最近更新 更多