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?
[Gelöst] tshark & Wireshark Dokumentation
[Gelöst] tshark & Wireshark Dokumentation
Zuletzt geändert von s837ubc am 12.01.2015 20:48:35, insgesamt 1-mal geändert.
Re: tshark & Wireshark Dokumentation
Yep, im tshark ist es zugegebenermaßen etwas umständlich:
EDIT:
Ah, Du willst das "Standardausgabe"-Format, aber zusätzlich noch die Namesauflösung, also in etwa so:
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
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
Re: tshark & Wireshark Dokumentation
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.
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.
Re: tshark & Wireshark Dokumentation
Ja, es sind schon verdammt viele ![Wink ;)](./images/smilies/icon_wink.gif)
Wie Dir sicher aufgefallen ist stimmt ja mein Beispiel ja auch nicht 100%, z.B. wenn ARP-requests reinkommen:
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:
![Wink ;)](./images/smilies/icon_wink.gif)
Code: Alles auswählen
$ tshark -G fields | grep "^F" | wc -l
125178
Code: Alles auswählen
325 15.578842000 ARP 42 Who has 192.168.1.18? Tell 192.168.1.1
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
Re: tshark & Wireshark Dokumentation
Hallo Dufty,
vielen Dank für Dein Engagement.![Smile :-)](./images/smilies/icon_smile.gif)
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.![traurig :-(](./images/smilies/icon_sad.gif)
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.
vielen Dank für Dein Engagement.
![Smile :-)](./images/smilies/icon_smile.gif)
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.
![traurig :-(](./images/smilies/icon_sad.gif)
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.
Re: tshark & Wireshark Dokumentation
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 ...
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 ...
Re: tshark & Wireshark Dokumentation
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.
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.