Назад | Перейти на главную страницу

«Обратный поиск» в текстовом файле зоны DNS

Есть ли существующий инструмент или классный или интересный способ найти все элементы в файле зоны DNS, которые "разрешаются" на данный IP-адрес? (без использования DNS-сервера)

Например, у нас может быть следующая не очень хорошо организованная конфигурация DNS:

        example.org. 60 IN A     10.0.0.1
    new.example.org. 60 IN A     10.0.0.10            
    www.example.org. 60 IN CNAME example.org.
    old.example.org. 60 IN CNAME www.example.org.
toaster.example.org. 60 IN CNAME bigbox.example.org.
cutebox.example.org. 60 IN A     new.example.org.
 bigbox.example.org. 60 IN A     10.0.0.1

Ответ инструмента на вопрос: 10.0.0.1 должен быть набор example.org, www.example.org, old.example.org, toaster.example.org, bigbox.example.org

ОБНОВИТЬ: чтобы прояснить: у нас ЕСТЬ файл зоны для домена, доступный

ОБНОВИТЬ: следующий сценарий, который я только что скопировал, делает почти именно то, что я хотел (ожидает файл зоны DNS на стандартном вводе) (пока нет поддержки IPv6 :-P):

#! /usr/bin/env python

import re
import sys

cols = (0, 4)
type_col = 3
types = ('A', 'CNAME')

if len(sys.argv) != 2:
    sys.exit('query not given (IP or hostname)')

query = sys.argv[1]

rex_not = re.compile(r'^\s*;')

relations = []
found = set([query])

def filter_pairs(l, f):
    for itm in l:
        if itm[1] in f: yield itm

in_pairs = []
for line in sys.stdin:
    if rex_not.match(line): continue
    itms = re.split(r'\s+', line.strip())
    try:
        typ = itms[type_col]
        if typ not in types: continue
        a, b = (itms[cols[0]], itms[cols[1]])
    except IndexError: continue
    if a and b: in_pairs.append((a, b))

oldpairs = in_pairs[:]

while True:
    pairs = list(filter_pairs(in_pairs, found))
    for itm in pairs: found.add(itm[0])
    if len(pairs) == len(oldpairs): break
    oldpairs = pairs

found = found.difference(set([query]))

for x in found: print(x)

Это невозможно сделать, если для каждого из них нет обратной записи DNS. Конечно, некоторые люди скажут вам, что это возможно, и даже укажут вам на множество веб-сайтов, которые утверждают, что это делают, но факт в том, что это просто невозможно.