summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--Makefile36
-rw-r--r--README47
l---------debian/README.Debian1
-rw-r--r--debian/changelog5
-rw-r--r--debian/compat1
-rw-r--r--debian/control13
-rw-r--r--debian/copyright7
-rwxr-xr-xdebian/rules3
-rw-r--r--main.c9
10 files changed, 115 insertions, 8 deletions
diff --git a/.gitignore b/.gitignore
index cba7efc..e473d8b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -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
diff --git a/README b/README
new file mode 100644
index 0000000..2c56d8a
--- /dev/null
+++ b/README
@@ -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 $@
diff --git a/main.c b/main.c
index c96bc8e..aa37c89 100644
--- a/main.c
+++ b/main.c
@@ -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;