dnsfind je program za iskanje delujočih rekurzivnih DNS srežnikov v podomrežjih naslovnega prostora IPv4.
namestitev na debianske sisteme:
dodati je treba moj APT repozitorij, navodila za to so na http://prog.sijanec.eu
apt install dnsfind
prevod in namestitev na ostale s posix kompatibilne sisteme:
make && make install
program vsakemu strežniku v kot argumenti navedenih omrežjih pošlje majhen IPv4(UDP(DNS)) paket, manjši od 68 bajtov, tako da se ne fragmentira, vsebujoč DNS zahtevo za poljubno domeno. domena mora imeti v DNS sistemu en A zapis, program pa preveri, če se zapis v morebitnem odgovoru ujema z dejanskim A zapisom in ustrezno sporoči na standardni izhod.
da se nastaviti časovne zamike, recimo zamik med pošiljanjem paketov. program po želji lahko shranjuje bodisi prejete in poslane bodisi samo prejete pakete v PCAP datoteko za nadaljno statistično obdelavo.
ob vsakem prejetem paketu se izpiše vrstica na standarni izhod v slednji obliki:
vsaka vrstica se začne z RESPONSE, temu sledi tabulator in naslov strežnika nato pa:
eno izmed - WORKING, kar pomeni, da je prvi A zapis odgovora pravilen,
- LYINGWITH predledek naslov, kar pomeni, da je 1. A zapis napačen in ga pove,
- NOA, kar pomeni, da A zapisa ni bilo v odgovoru.
prvima dvema zapisoma (WORKING in LYINGWITH) lahko sledi še en tabulator in MORETHANONE
presledek številka, ki pove, da je odgovor vseboval več kot en A zapis in pove koliko jih je.
stikala za razne opcije je treba navesti pred domeno in omrežji in so sledeča:
-a IP naslov (A RR) navedene domene za pošiljanje, ki naj se uporabi namesto getaddrinfo(3)
-b Uporabi mrežno kartico, katere IP naslov je podan, za pošiljanje in prejemanje paketov
-e Navedi ime datoteke, v katero naj piše vsak poslan/prejet (glej -f) paket v PCAP obliki
-f Ne vključi poslanih paketov, ki so itak vedno isti, v PCAP datoteko, nastavljeno z -e
-h Pokaže vgrajeno besedilo pomoči
-k Večaj IP naslov v "obratnem" vrstnem redu (b000, b100, b010, b110, b001, b101, b011, b111)
-m Podan je en naslov računalnika namesto omrežij, program išče strežnike okoli v "spirali"
-n Ko je najdenih toliko delujočih strežnikov, kot je podana številka kot argument, ustavimo
-p Nastavi številko izvornih UDP vrat. Če ni navedena, jedro izbere eno prosto.
-t Zamik pred pošiljanjem naslednjega paketa v mikrosekundah (privzeto in minimalno 1000)
-w Končaj toliko mikrosek. po prejemu zadnjega paketa po koncu pošiljanja (privzeto 1000000)
morebitnim stikalom sledi domena z *ENIM* DNS A zapisom, ki bo poslana kot vprašanje v DNS zahtevah.
domeni sledijo omrežja, ki so podana kot naslov omrežja, poševnica in omrežna maska.
omrežja so ločena s presledki, z drugimi besedami mora biti vsako svoj argument.
naslov omrežja in omrežja maska sta lahko tudi domeni, ki sta na začetku prevedeni v IPv4.
omrežne maske so lahko tudi število začetnih nastavljenih bitov (24 za 255.255.255.0).
omrežne maske, ki niso CIDR, so dovoljene, recimo 255.0.255.255.
na primer za skeniranje celotnega Interneta se lahko uporabi kakršen koli naslov in maska 0.
skeniranje omrežja se začne na podanem naslovu in ne na 0. računalniku (10.0.0.100/24 skenira 156 naslovov).
teoretično bi trajalo en dan za skeniranje celotnega naslovnega prostora IPv4 (2^32 računalnikov), a je ta številka lahko veliko večja, recimo tudi zato, ker jedro skoraj vedno malo zamudi zamik med pošiljanjem dveh paketov, ki je uveljavljen s sistemskim klicem poll(2). prav tako se čas porablja tudi ob pisanju na standardni izhod, standardno napako, vtičnice in PCAP datoteko.
avtomatska gradnja izvršilnih datotek in programskih paketov za štiri arhitekture:
gospodar sužnjev: https://jenkins.sijanec.eu/job/dnsfind
sužnji: http://amd64.sijanec.eu/prog/dnsfind
http://arm64.sijanec.eu/prog/dnsfind
http://armel.sijanec.eu/prog/dnsfind
i386 pa gradi moj osebni prenosni računalnik, ki ni vedno povezan v Internet.
možne napake:
EINVAL na sendto(2): verjetno je bil paket poslan na lokalno mrežo, vendar je ARP tabela
polna. povečajte arp tabelo ali pošljite vse pakete na gateway.
https://www.kernel.org/doc/Documentation/networking/ip-sysctl.txt
sysctl -a | grep -i ipv4.*default.gc.thresh
-- Anton Luka Šijanec <anton@sijanec.eu> Tue, 19 Jan 2022 14:30:00 +0200