0

我有以下代码使用 dnspython 查找域的名称服务器,然后遍历该列表获取每个服务器的 IPv4 和 IPv6 地址。

我能够模拟resolver_list.

但是,我不确定如何或是否可以模拟 A 和 AAAA 记录的查询结果,因为它都是同一个测试的一部分,而且我已经模拟过dns.resolver.query了。

    resolver_list = dns.resolver.query(domain, rdtype='NS', tcp=True)
    for ns in resolver_list:
        gtld_ns_server_list.append(ns.to_text().rstrip('.').lower())
        a_records.append(dns.resolver.query(ns.rstrip('.'), "A"))
        aaaa_records.append(dns.resolver.query(ns.rstrip('.'), "AAAA"))

到目前为止,我的模拟看起来像这样:

        ns = [
            ('ns1.external-server.com', 'NS'),
            ('ns2.external-server.com', 'NS'),
        ]
        responses = [[FakeRR(txt, rdtype=type) for txt, type in ns]]

        def fake_dns_query(*args, **kwargs):
            return responses.pop()

        mocker.patch(
            'site_management.validators.dns.resolver.query',
            fake_dns_query
        )

任何帮助表示赞赏。

4

1 回答 1

0

我想我得到了我需要的东西。我最终向responses变量添加了额外的列表,然后为针对 A 和 AAAA 记录进行的额外查询弹出这些列表。

可能有另一种方法可以做到这一点,但至少我现在得到了我所期望的。

于 2020-07-02T13:05:05.587 回答