diff options
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | Makefile | 36 | ||||
-rw-r--r-- | README | 47 | ||||
l--------- | debian/README.Debian | 1 | ||||
-rw-r--r-- | debian/changelog | 5 | ||||
-rw-r--r-- | debian/compat | 1 | ||||
-rw-r--r-- | debian/control | 13 | ||||
-rw-r--r-- | debian/copyright | 7 | ||||
-rwxr-xr-x | debian/rules | 3 | ||||
-rw-r--r-- | main.c | 9 |
10 files changed, 115 insertions, 8 deletions
@@ -1 +1,2 @@ a.out +dnsfind diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..13eba26 --- /dev/null +++ b/Makefile @@ -0,0 +1,36 @@ +DESTDIR=/ +SRCFILE=main.c +O=0 +CFLAGS += -Wextra -Wall -pedantic -g -O$O -I. -odnsfind -finput-charset=UTF-8 -fextended-identifiers +LIBS += +CC=cc +VGARGS += --leak-check=full --track-origins=yes --verbose --log-file=valgrind-out.txt --suppressions=/usr/lib/i386-linux-gnu/valgrind/default.supp --show-leak-kinds=all --leak-resolution=high + +.NOTPARALLEL: +default: + $(CC) $(CFLAGS) $(SRCFILE) $(LIBS) + +# tests if code compiles under gcc, clang and tcc +cc: + make -e CC=tcc + make -e CC=gcc + make -e CC=clang + +install: + mkdir -p $(DESTDIR)/usr/bin/ + cp dnsfind $(DESTDIR)/usr/bin/ + +distclean: + rm dnsfind -f + +clean: + rm dnsfind -f + +prepare: + apt install build-essential-y + +# developing is to be done on i386. for example the default suppression file is hardcoded for i386 here: +# developing is to be done on bullseye. + +valgrind: + G_SLICE=always-malloc G_DEBUG=gc-friendly valgrind $(VGARGS) ./dnsfind @@ -0,0 +1,47 @@ +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 omrežji in so sledeča: + -a Nastavi IP naslov A RR domene, podane v -d, ki naj se uporabi namesto klica getaddrinfo(3) + -b Uporabi mrežno kartico, katere IP naslov je podan, za pošiljanje in prejemanje paketov + -d Nastavi domeno z enim A zapisom, ki bo poslana kot vprašanje (privzeto: dnsfind.sijanec.eu) + -e Ne vključi poslanih paketov, ki so itak vedno isti, v PCAP datoteko, nastavljeno z -o + -h Pokaže besedilo pomoči + -o Sproti naj se v navedeno datoteko piše vsak poslan/prejet (glej -e) paket v PCAP obliki + -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 mikrosekund po prejemu zadnjega paketa po koncu pošiljanja (privzeto 1000000) +stikalom 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. + +opozorilo: pred skeniranjem velikih omrežij se posvetujte s ponudnikom omrežne povezljivosti in +vsekakor zamenjajte domeno iz dnsfind.sijanec.eu na nekaj svojega s stikalom -d. + +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 <code>poll(2)</code>. prav tako se +čas porablja tudi ob pisanju na standardni izhod, standardno napako, vtičnice in PCAP datoteko. + + -- Anton Luka Šijanec <anton@sijanec.eu> Tue, 18 Jan 2022 14:30:00 +0200 diff --git a/debian/README.Debian b/debian/README.Debian new file mode 120000 index 0000000..59a23c4 --- /dev/null +++ b/debian/README.Debian @@ -0,0 +1 @@ +../README
\ No newline at end of file diff --git a/debian/changelog b/debian/changelog new file mode 100644 index 0000000..3df16c8 --- /dev/null +++ b/debian/changelog @@ -0,0 +1,5 @@ +dnsfind (0.0.0-1) stable; urgency=low + + * Initial release. + + -- Anton Luka Šijanec <anton@sijanec.eu> Tue, 18 Jan 2022 14:30:00 +0200 diff --git a/debian/compat b/debian/compat new file mode 100644 index 0000000..b4de394 --- /dev/null +++ b/debian/compat @@ -0,0 +1 @@ +11 diff --git a/debian/control b/debian/control new file mode 100644 index 0000000..97d19e6 --- /dev/null +++ b/debian/control @@ -0,0 +1,13 @@ +Source: dnsfind +Section: net +Priority: optional +Maintainer: Anton Luka Šijanec <anton@sijanec.eu> +Build-Depends: debhelper (>=11~) +Standards-Version: 4.1.4 +Homepage: http://git.sijanec.eu/sijanec/dnsfind + +Package: dnsfind +Architecture: any +Multi-Arch: foreign +Depends: ${misc:Depends}, ${shlibs:Depends} +Description: find recursive DNS resolvers on IPv4 networks diff --git a/debian/copyright b/debian/copyright new file mode 100644 index 0000000..5a0b54f --- /dev/null +++ b/debian/copyright @@ -0,0 +1,7 @@ +Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Upstream-Name: sear.c +Upstream-Contact: Anton Luka Šijanec <anton@sijanec.eu> +Source: http://git.sijanec.eu/sijanec/sear.c +Copyright: 2021 Anton Luka Šijanec +Disclaimer: This package is not licensed under any license. +Comment: At least in current version of this program, no licensing information was published. diff --git a/debian/rules b/debian/rules new file mode 100755 index 0000000..cbe925d --- /dev/null +++ b/debian/rules @@ -0,0 +1,3 @@ +#!/usr/bin/make -f +%: + dh $@ @@ -20,13 +20,6 @@ #include <poll.h> /* poll(2) */ #include "domain2name.c" #include "host.c" -#define MIN(a,b) ((a) < (b) ? (a) : (b)) -#define MAX(a,b) ((a) > (b) ? (a) : (b)) -#define MAXDOMAIN 255 -#define QUERYDOMAIN "http://sijanec.eu/link?r=.sijanec.eu." -#define EXPECTEDA 93.103.235.126 -#define XSTR(x) #x -#define STR(x) XSTR(x) #define HELP "find recursive DNS resolvers on IPv4 networks\n" \ "%s [-a ip] [-b ip] [-d domain] [-eh] [-o file] [-p port] [-t μs] [-w μs] net1 [net2 ...]\n" \ " -a Specify the IPv4 of the -d domain to be used instead of getaddrinfo(3).\n" \ @@ -270,7 +263,7 @@ int logudp (int o /* fd */, struct sockaddr_in s, struct sockaddr_in d, char * u c = (char *) memcpy(c, &n, 2) + 2; c = (char *) memcpy(c, u, l) + l; if (write(o, b, LOGUDP_L) == -1) { /* atomic and thread safe, as per posix */ - perror("write(" STR(LOGUDP_L) ")"); + perror("write(o, b, LOGUDP_L)"); return -3; } return LOGUDP_L; |