Как сделать IPv4-адрес пригодным для печати с помощью Python API getdnsapi?

Я работаю с новым API Python getdns.

Я специально пытаюсь получить DNSSEC_BOGUS ответы. Для этого мне нужно посмотреть на results.reply_tree.reply[n]['answer']['rdata']['ipv4_address'] элементы. Это 4-байтовое двоичное представление адреса IPv4. Есть ли в getdns простой способ изменить это на IPv4-адрес для печати?

Я не хочу использовать results.just_address_answers поле, потому что нет никакой гарантии, что адреса в том же порядке.

Вот мой пример кода:

import getdns, sys
def get_ip(hostname, ctx, extensions):
    print("host: {} extensions: {}".format(hostname, extensions))
    results = ctx.address(name=hostname, extensions=extensions)
    print("addresses:")
    for addr in results.just_address_answers:
        print("  {}".format(addr['address_data']))
    print("replies:")
    for reply in results.replies_tree:
        for a in reply['answer']:
            if a['type']==getdns.RRTYPE_A:
                try:
                    print("  type={} data={} dnssec_status={}".format(a['type'], a['rdata']['ipv4_address'], reply['dnssec_status']))
                except KeyError:
                    print("  no dnssec_status")
    print("")

if __name__=="__main__":
    print("getdns.DNSSEC_SECURE={}".format(getdns.DNSSEC_SECURE))
    print("getdns.DNSSEC_INDETERMINATE={}".format(getdns.DNSSEC_INDETERMINATE))
    print("getdns.DNSSEC_INSECURE={}".format(getdns.DNSSEC_INSECURE))
    print("getdns.DNSSEC_BOGUS={}".format(getdns.DNSSEC_BOGUS))
    failed = 'www.dnssec-failed.org'
    ctx = getdns.Context()
    get_ip(failed, ctx, {})
    get_ip(failed, ctx, {'dnssec_return_status' : getdns.EXTENSION_TRUE })
    get_ip(failed, ctx, {"dnssec_return_validation_chain" : getdns.EXTENSION_TRUE})

Хотя это работает, я действительно хочу data= это печатает, чтобы напечатать адрес IPv4, а не только четыре двоичных байта.

1 ответ

Решение
bin_addr = results.reply_tree.reply[n]['answer']['rdata']['ipv4_address']
string_addr = '.'.join(map(str, map(ord, bin_addr)))
Другие вопросы по тегам