Berny's Knowledgebase als Newsfeed

Im Bereich Netzwerk sind Linux und seine Tools von je her sehr stark. Einige der extrem nützlichen aber wenig bekannten Tools möchte ich in loser Folge hier vorstellen.

hping2 / hping3

Eines dieser sehr nützlichen Tools, auf das mich erst Fyodor (Autor von Nmap) gebracht hat, ist hping2 bzw. in den aktuelleren Distributionen hping3

Normalerweise wenn es darum geht, die Erreichbarkeit eines Rechners im LAN oder im Internet zu prüfen bzw. die Roundtrip-Times zu bestimmen, kommt das weit verbreitete Tool ping zum Einsatz. Leider werden Firewalls immer häufiger extrem restriktiv konfiguriert. Dieser Einstellung fällt dann teilweise auch das Protokoll ICMP (das von ping verwendet wird) zum Opfer. Pings kommen nicht mehr durch, das Tool ist dann nutzlos.

Häufig bieten aber die Rechner, die von Interesse sind, mindestens einen Netzwerk-Dienst an. Die entsprechenden Ports müssen dann natürlich in der Firewall freigeschaltet sein. Diese Eigenschaft macht sich jetzt hping2 zunutze, zumindest sofern es sich um einen TCP-Port handelt. Es schickt einfach TCP-Pakete an den entsprechenden Port. Die TCP-Flags darf man dabei sogar noch selber frei bestimmen. Im Prinzip ist es hping2 sogar egal, ob der Port offen oder geschlossen ist, denn auf ein SYN-Paket kommt normalerweise immer eine Antwort: Entweder ein SYN-ACK (bei offenem Port) oder ein RST (bei geschlossenem Port) - nur gefiltert darf er nicht sein (Drop auf der Firewall), denn dann würde gar keine Antwort zurückkommen.

Über die Antwort-Pakete kann die Erreichbarkeit des Hosts erkannt werden und es können Roundtrip-Times bestimmt werden.

Ein Beispiel

root@localhost ~ # hping2 -p 22 -S dunno.dyndns.info
HPING dunno.dyndns.info (lo 127.128.129.130): S set, 40 headers + 0 data bytes
len=44 ip=127.128.129.130 ttl=64 DF id=0 sport=22 flags=SA seq=0 win=32792 rtt=0.2 ms
len=44 ip=127.128.129.130 ttl=64 DF id=0 sport=22 flags=SA seq=1 win=32792 rtt=0.2 ms
len=44 ip=127.128.129.130 ttl=64 DF id=0 sport=22 flags=SA seq=2 win=32792 rtt=0.2 ms
len=44 ip=127.128.129.130 ttl=64 DF id=0 sport=22 flags=SA seq=3 win=32792 rtt=0.1 ms
len=44 ip=127.128.129.130 ttl=64 DF id=0 sport=22 flags=SA seq=4 win=32792 rtt=0.1 ms

--- dunno.dyndns.info hping statistic ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max = 0.1/0.2/0.2 ms
root@localhost ~ #

Mit -p werden die Probes auf den Port 22 (SSH) geschickt. In diesem Fall ein offener Port, da jeweils SYN-ACK zurückkommt (flags=SA). Mit -S hatten wir angegeben, dass wir einfach SYN-Pakete hinschicken wollen, ACKs hätten aber auch funktioniert (allerdings hätten wir dann nicht erfahren, ob der Port offen oder geschlossen ist).

mehr Funktionen

hping2 benötigt zur Ausführung - wie sein Bruder ping - root-Rechte, um selbst erstellte Pakete direkt an der Netzwerkschnittstelle abgeben zu dürfen. ping ist allerdings meist SUID root installiert, sodass auch jeder unprivilegierte User es verwenden kann. hping2 ist sehr viel mächtiger als das kleine Beispiel zeigen kann. Man könnte fast sagen: Ein umfangreiches Konstruktionskit für eigene IP-Pakete. Daher empfiehlt es sich aus Sicherheitsgründen meist nicht, dieses Tool SUID root zu installieren. Man muss für den Aufruf auch wirklich root sein. Ggf. bietet es sich noch an, einzelnen Usern über sudo die Möglichkeit zu geben, hping2 auszuführen.

Wer sich für den weiteren (gigantischen) Funktionsumfang interessiert, dem sei die man-Page empfohlen, oder http://hping.org/

nur noch ein kurzes Beispiel von Fyodor dazu:

root@localhost ~ # hping2 -c 5 -i 1 -p 80 -S www.example.com
HPING www.example.com (eth1 192.0.32.10): S set, 40 headers + 0 data bytes
len=46 ip=192.0.32.10 ttl=241 DF id=19453 sport=80 flags=SA seq=0 win=4356 rtt=210.3 ms
len=46 ip=192.0.32.10 ttl=241 DF id=7398 sport=80 flags=SA seq=1 win=4356 rtt=205.2 ms
len=46 ip=192.0.32.10 ttl=241 DF id=22015 sport=80 flags=SA seq=2 win=4356 rtt=208.5 ms
len=46 ip=192.0.32.10 ttl=241 DF id=17514 sport=80 flags=SA seq=3 win=4356 rtt=221.8 ms
len=46 ip=192.0.32.10 ttl=241 DF id=24223 sport=80 flags=SA seq=4 win=4356 rtt=205.5 ms

--- www.example.com hping statistic ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max = 205.2/210.3/221.8 ms
root@localhost ~ #

Es werden 5 Pakete geschickt (-c) im Abstand von jeweils einer Sekunde (-i). Ziel ist es, herauszufinden, ob der betreffende Host sich für den Idle-Scan von Nmap eignet. www.example.com eignet sich also nicht, da die IP-ID (Feld id in den Ausgabe-Zeilen) offensichtlich zufällig gewählt wird, nicht jeweils inkrementiert.

Installation

Bei den gängigen Distributionen kann man einfach das entsprechende Paket aus dem Repository installieren.

Hostnames unterhalb einer bestimmten Domain finden

Eigentlich handelt es sich beim diesem Tip gar nicht um ein Linux Tool, die Beschreibung passt aber trotzdem hier am besten:

Man möchte herausfinden, welche Hostnames es unter einer bestimmten Internet-Domain gibt. Dazu kann man natürlich probieren, ob der zuständige DNS-Server einen Zone-Transfer zulässt. Aber die meisten DNS-Server sind heute hinreichend sicher konfiguriert, dass das ausser "Transfer failed" nichts weiter zurückliefert.

Es gibt aber mehrere Datenbanken im Internet, wo sich die Informationen zumindest teilweise, oft sogar größtenteils befinden. Diese abzufragen lohnt also in dem Fall immer.

Die eine davon hält Google. Hier verwendet man den Suchbegriff

site:<Domain-Name>

also z. B.

site:example.com

um zwar ohne Suchwort zu arbeiten, die Suche aber auf die entsprechende Domain einzugrenzen. Im Prinzip also eine Auflistung aller Seiten. Dabei werden bei den Treffern auch die Hostnames gleich in der Übersicht genannt.

Die andere Datenbank, die ich hier vorstellen möchte, hält Netcraft für Ihre Internet-Statistik. Unter https://searchdns.netcraft.com/?host steht ein Formular bereit, wo man die gesuchte Domain direkt eingeben kann.

whois

Auch whois ist so ein Tool, von dem viele maximal die Grundfunktionalitäten kennen. Es fragt Informationen aus den Whois-Datenbanken ab, die Einträge dazu enthalten, wem Domains oder IP-Adress-Bereiche gehören und wer sie technisch verwaltet. Auch die für Domains zuständigen DNS-Server sind hier verzeichnet.

Auch die Whois-Datenbanken sind als verteiltes System konzipiert, ähnlich wie etwa DNS.

Die Whois-Server der unterschiedlichen Registrare setzen unterschiedlich starke Restriktionen. Denic etwa liefert den Admin-C nicht mit aus. Wenn man den auch erfahren will, ist man gezwungen, das etwas umständliche Webinterface zu nutzen. Bevor man an die gesuchte Information bekommt, muss man noch ein Captcha lösen.

Nicht alle der unten genannten Anfragen funktionierene somit gegen alle Whois-Server, teilweise liefern sie gar keine oder nur reduzierte Antworten.

Infos zu Domains

whois example.com

Das Linux-Tool (bei wohl allen wichtigen Distributionen in den Paket-Repositories enthalten) sucht sich - wenn wie hier nicht dediziert angegeben - selbständig den richtigen Whois-Server.

Man kan auch einen Whois-Server dediziert fragen:

whois -h whois.iana.org  example.com

auch wenn das in genau dem Fall nicht viel ergibt, da example.com eine Domain ist die laut RFC2606 explizit für Dokumentationszwecke reserviert ist und nicht regulär zur Verfügung steht. Verwenden Sie also für eigene Experimente besser eine andere Domain.

Welcher Whois-Server ist für welche Inhalte zuständig

Dazu schreibe ich nicht viel, dazu gibt es bereits einen hervorragenden Wikipedia-Artikel.

So gut wie alle Betreiber unterhalten auch ein Webinterface, um die Whois-Datenbanken abzufragen - auch recht praktisch, vor allem wenn man gerade vor einem nicht-Linux-Rechner sitzt. Die Links sind ebenfalls im genannten Wikipedia-Artikel zu finden.

Infos zu Netzwerk-Bereichen

whois 192.0.32.10

Gibt Infos dazu, zu welchem Netzwerkbereich die angegebene IP-Adresse gehört und an wen dieser vergeben ist.

Abfragen für Fortgeschrittene

Diese funktionieren leider bei weitem nicht gegen alle Whois-Server, siehe oben. ARIN ist aber z. B. sehr freizügig mit Informationen.

Alle ARIN-Kontakte mit eMail-Adresse in example.com

whois -h whois.arin.net  @example.com

Alle Netzwerk-Handles, die mit example beginnen:

whois -h whois.arin.net "n example*"

Namen von Organisationen, die mit example beginnen:

whois -h whois.arin.net "o example*"