[Gelöst] tshark & Wireshark Dokumentation

Einrichten des lokalen Netzes, Verbindung zu anderen Computern und Diensten.
Antworten
s837ubc
Beiträge: 133
Registriert: 23.07.2013 14:17:01

[Gelöst] tshark & Wireshark Dokumentation

Beitrag von s837ubc » 21.03.2014 18:27:39

Hallo,

mittels tshark wird beabsichtigt, den Netzverkehr teilweise zu protokollieren.

Um von der Aufzeichnung nur einzelne Informationen anzeigen zu lassen, müssen die Feldnamen mit dem Parameter -e angegen werden.

In der Hilfe-Seite von tshark wird auf die Webseite http://www.wireshark.org/docs/dfref/ verwiesen, um an die verfügbaren Feldnamen zu kommen.

Von vielen angegebenen Feldern fehlt scheinbar der Inhalt. Bei der Ausgabe werden nur leere Inhalte zurückgegeben.

Kann mir jemand erläutern, wie der Parameter gehandhabt werden muss?

Es soll z.B. die Source-IPAdresse und die Ziel-IPAdresse und deren DNS-Namen angegeben werden.

In der Standard-Ausgabe kann leider nur entweder die IP-Adresse oder der DNS-Name mit dem Parameter -N ausgegeben werden.

Ansonsten sind in der Standardausgabe von TShark alle benötigten Feldinformationen enthalten.

Kann mir hier jemand helfen?
Zuletzt geändert von s837ubc am 12.01.2015 20:48:35, insgesamt 1-mal geändert.

dufty2
Beiträge: 1711
Registriert: 22.12.2013 16:41:16

Re: tshark & Wireshark Dokumentation

Beitrag von dufty2 » 21.03.2014 20:25:41

Yep, im tshark ist es zugegebenermaßen etwas umständlich:

Code: Alles auswählen

$ tshark -i eth0 -w /tmp/mydump.pcap

$ tshark -T fields -e ip.src -e ip.src_host -e ip.dst -e ip.dst_host -o nameres.network_name:TRUE -r /tmp/mydump.pcap
EDIT:
Ah, Du willst das "Standardausgabe"-Format, aber zusätzlich noch die Namesauflösung, also in etwa so:

Code: Alles auswählen

$ tshark -N n -T fields -e frame.number -e frame.time_relative -e ip.src -e ip.dst -e ip.src_host -e ip.dst_host -e col.Protocol -e frame.len -e col.Info -Eseparator=/s -r /tmp/dump.pcap

s837ubc
Beiträge: 133
Registriert: 23.07.2013 14:17:01

Re: tshark & Wireshark Dokumentation

Beitrag von s837ubc » 22.03.2014 14:23:59

Hallo dufty2,

genau das habe ich gesucht. Vielen Dank.

Eine Auflistung von allen verfügbaren Felder habe ich bis dato noch nicht ausfindig machen können.

Bisher habe ich mir die Felder von diversen Beispielen zusammen gesucht.

Weder WireShark noch im Web habe ich eine verständliche Auflistung der verfügbaren Felder gefunden.

edit:
Mit dem Parameter -Tpdml (oder auch -Tpsml ?) können die Feldnamen auch herausbekommen werden.
Zuletzt geändert von s837ubc am 22.03.2014 15:58:51, insgesamt 1-mal geändert.

dufty2
Beiträge: 1711
Registriert: 22.12.2013 16:41:16

Re: tshark & Wireshark Dokumentation

Beitrag von dufty2 » 22.03.2014 15:43:13

Ja, es sind schon verdammt viele ;)

Code: Alles auswählen

$ tshark -G fields | grep "^F" | wc -l
125178
Wie Dir sicher aufgefallen ist stimmt ja mein Beispiel ja auch nicht 100%, z.B. wenn ARP-requests reinkommen:

Code: Alles auswählen

325 15.578842000     ARP 42 Who has 192.168.1.18?  Tell 192.168.1.1
Ggf. müsste man "-e eth.addr" noch mitnehmen und per bash-script wieder einblenden(?).

Meine Versuche stattdessen mit Displayfiltern zu arbeiten waren diesbezüglich nicht von Erfolg gekrönt:

Code: Alles auswählen

$ tshark -Y "(eth.addr and !(ip.src)) or (ip.src) and (ip.src_host)" -r /tmp/mydump.pcap

s837ubc
Beiträge: 133
Registriert: 23.07.2013 14:17:01

Re: tshark & Wireshark Dokumentation

Beitrag von s837ubc » 23.03.2014 10:00:16

Hallo Dufty,

vielen Dank für Dein Engagement. :-)

Um mein Anliegen besser zu verstehen, will ich kurz dieses Erläutern:

In einem Mehrfamilienhaus leben 5 - 6 Familien zusammen. Es gibt nur ein VDSL-Anschluß für alle. Aufgrund der Anschlußinhaber-Haftung will sich der Anschlußinhaber natürlich vor etwaigen strafrechtlichen Folgen weitestgehend absichern.

Nun habe ich mir folgendes ausgedacht: Wenn man alle Pakete-Informationen (Adressen, MAC-Adresse vom LAN-Gerät, uvm.) fortlaufend abspeichert, dann müsste man im Falle das Falls lediglich nachsehen, wer zu dem fraglichen Moment online war. Und schon kann der Anschlußinhaber beleben, dass die strafrechtliche Aktion von Teilnehmer X durchgeführt wurde.

Als Router wird eine FritzBox 7390 eingesetzt.

Über eine der vielen Capture-Schnittstellen können alle Paket-Informationen in Echtzeit abgegriffen werden.

Mit dem nachstehenden Shell-Script werden die Pakete auf einem Linux Debian System verarbeitet:

--------------------------------------
#!/bin/sh

echo "Aufruf Parameter $1\n"
if [ "$1"=="run" ] ; then
status=1
else
status=0

service="$0 run"

ps -a | grep -v grep | grep '$service' > /dev/null
result=$?


echo $result

if [ "${result}" -eq "0" ] ; then
echo "Capture läuft bereits"
exit 1
else
sh $service &
exit 0
fi
fi

if [ "$status"=="1" ]; then
IP="fritz.box"

Passwd="PASSWORT"
Username="NAME"

# Challenge abholen
Challenge=`wget -O - "http://$IP/login_sid.lua" 2>/dev/null | sed 's/.*<Challenge>\(.*\)<\/Challenge>.*/\1/'`

# login aufbauen und hashen
CPSTR="$Challenge-$Passwd"
MD5=`echo -n $CPSTR | iconv -f ISO8859-1 -t UTF-16LE | md5sum -b | awk '{print substr($0,1,32)}'`
RESPONSE="$Challenge-$MD5"
POSTDATA="?username=$Username&response=$RESPONSE"

# login senden und SID herausfischen
SID=`wget -O - --post-data="$POSTDATA" "http://$IP/login_sid.lua" 2>/dev/null | sed 's/.*<SID>\(.*\)<\/SID>.*/\1/'`

# Internet Capture
#Schnittstelle 1(Internet)=3-17
#wget -O - "http://$IP/cgi-bin/capture_notimeout?ifaceorminor=3-17 \
#alle Schnittstellen =3-0
wget -O - "http://$IP/cgi-bin/capture_notimeout?ifaceorminor=3-0 \
&snaplen=1600&capture=Start&sid=$SID" 2>/dev/null | \

tshark -N mntC -t ad -i - -S -l '(((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)' –Tfields -Eseparator=/t -e frame.number -e frame.time -e ip.src -e ip.src_host -e ip.dst -e ip.dst_host -e frame.len -e tcp -e http -e frame.protocols -e expert.message -Tfields | \
perl tshark-sql-capture.pl

#wget -O - "http://$IP/cgi-bin/capture_notimeout?ifaceorminor=3-0 \
#Externe Schnittstelle
#wget -O - "http://$IP/cgi-bin/capture_notimeout?ifaceorminor=3-17 \
#Lokal LAN
#wget -O - "http://$IP/cgi-bin/capture_notimeout?ifaceorminor=1-eth0\
#&snaplen=1600&capture=Start&sid=$SID" 2>/dev/null

fi

----------------------------------------

Wie man sehen kann werden die Daten in eine MySQL-Datenbank gespeichert. Hierzu kommt ein Perl-Script zum Einsatz:

-----------------------------------------

# preparing the MySQL
#use strict;
#use warnings;
use DBI;
use URI::Escape;

my $dns = "DBI:mysql:capture;localhost";

my $dbh = DBI->connect($dns,capture,raspberry,
{
PrintError => 1, # warn() on errors
RaiseError => 0, # don't die on error
AutoCommit => 1, # commit executes immediately
}
) or die "Cannot connect to database: $DBI::errstr";

my $fldList = "frame_number, dat_time, ipSrc, dnsSrc, ipDst, dnsDst, len, tcp, http, protocols, message";

my $db = "tab_capture";

while (<STDIN>) {
my $data;
chomp($data = <STDIN>);

my @data = split (/\t/, $data );
my $frmNr = $data [0];
my $time = $data [1];
my $ipSrc = $data [2];
my $ipSrcHost = $data [3];
my $ipDst = $data [4];
my $ipDstHost = $data [5];
my $len = $data [6];
my $tcp = $data [7];
my $http = $data [8];
my $proto = $data [9];
my $msg = "urldecode('" . uri_escape ( $data [10] ) . "')";
my $cmd = "INSERT INTO $db ( $fldList ) VALUE ($frmNr, str_to_date('$time','%M %d, %Y %H:%i:%s.%f'), '$ipSrc', '$ipSrcHost', '$ipDst', '$ipDstHost', '$len', '$tcp', '$http', '$proto', $msg)";
my $sth = $dbh-> prepare( $cmd );
$sth->execute;
}

#Terminate MySQL
$dbh->disconnect;

-------------------------------------

Da die Verbindung zu MySQL nur über den Prepare-Befehl müssen etwaige Daten mit Sonderzeichen erst für den Interpreter codiert werden. In der Datenbank müssen diese wiederum decodiert werden. Besser wäre es natürlich ohne den Interpreter. - Hier gibt es anscheinend noch keine direkte Schnittstelle. :-(

Im nächsten Schritt sollen über eine Web-Oberfläche (z.B. php-Abfragen) die gesuchten Angaben herausgesucht werden können.

=======================

In etwa 13 Stunden fallen etwa 66MB an Daten in der Datenbank an. Hochgerechnet auf ein halbes Jahr macht das etwa 21 GB an Daten, die aufgehoben werden müssen. Nach einem halben Jahr darf man die Daten löschen.

Mein Frage ist natürlich, ob zum einem die Daten ausreichen, die gesammelt werden, oder ob hier noch einige fehlen, um beweisen zu können, dass der Anschlussinhaber selbst eine strafrechtliche Aktion nicht vorgenommen hat.

=======================

Beim ersten Probelauf ist aufgefallen, dass im Feld "Frame_number" nur frames mit geraden Zahlen in die Datenbank aufgenommen worden sind.
Was ist mit den Frame-Paketes ungerader Nummer passiert?

=======================

Als Hardware kommt ein Raspberry (Modell B) zum Einsatz. Dieser verbraucht gerade mal 3,5 Watt. Nachteil: Dieser hat leider kein Schalter zum Herunterfahren des Systems. Es muss also noch eine 9 Volt Batterie angeschlossen werden, um beim Stromausfall das System kontrolliert herunterfahren zu können.

=======================

Für weitere Ideen habe ich ein offenes Ohr.

dufty2
Beiträge: 1711
Registriert: 22.12.2013 16:41:16

Re: tshark & Wireshark Dokumentation

Beitrag von dufty2 » 23.03.2014 12:06:58

Oho, das ist quasi ein Vorratsdatenspeicherung, dünnes Eis, dünnes Eis!
Hoffentlich hat der VDSL-Besitzer ein schriftliche Einverständniserklärung aller Beteiligten.

Jedenfalls würde ich nur wer und wann, aber niemals was ("-e col.Info") speichern.

Bin kein Anwalt, kann also nicht beurteilen, ob Eure Daten - im Fall eines Falles - ausreichen.
Man denke nur an IP- resp. ARP-poisoning,
und Maschinenzertifikate im Privatbereich sind wohl eher unüblich ...

s837ubc
Beiträge: 133
Registriert: 23.07.2013 14:17:01

Re: tshark & Wireshark Dokumentation

Beitrag von s837ubc » 23.03.2014 18:07:47

Hallo dufty,

als Alternative käme eine Mitbenutzerkennung in Frage, die allerdings wiederum zusätzliche Gebühren kosten.

Dann könnte der DSL-Router als Modem konfiguriert werden. Alle Geräte müssten dann eine eigene Web-Verbindung mit der eigenen Mitbenutzerkennung aufbauen.

Vorteil:
Falls eine strafrechtliche Aktion von irgend einer Person durchgeführt wurde, kann diese durch den Mitbenutzerkennung identifiziert werden.

Nachteil:
Jeder PC muss eine Verbindung selbst aufbauen.

Ein erster Probelauf schlug übrigens fehl, da der Prozess MySQL nach 13 Stunden abgebrochen wurde. Die Scripte liefen hingegen weiter. An Datenspeicher stand noch genügend freier Speicher zur Verfügung.

Antworten