Ich habe ziemlich ausführlich danach gesucht, kann aber scheinbar kein funktionierendes Beispiel finden.
Mein Ziel ist es, den TCP-Verkehr auf einem bestimmten Port zu überwachen, um eingehende Verbindungen zu sehen und sie in eine Textdatei zu schreiben. Der Haken dabei ist, dass ich in jeder Zeile auch einen Zeitstempel brauche, um auf die Sekunde genau anzuzeigen, wann der Client eine Verbindung hergestellt hat.
Ich habe bereits netstat, nmap und tcptrack ausprobiert, aber keines davon unterstützt Zeitstempel.
Ich dachte, ein Linux-Shell-Skript könnte funktionieren, wenn ich einen bestimmten lokalen Port überwache und beim Herstellen einer Verbindung Text in eine Datei schreibe und dann einfach das Datum in jede Zeile anhänge.
Ich habe damit gespielt:
netstat -ano|grep 443|grep ESTABLISHED
so gut wie das:
tcptrack -i eth0 port 443
aber beides entspricht nicht meinen Anforderungen, da ich die Zeit brauche, zu der die Verbindung zustande kommt.
Wenn Sie Vorschläge haben oder mir den richtigen Weg weisen könnten, wäre ich Ihnen sehr dankbar.
Danke. :)
Antwort1
bearbeiten: Ich bekomme auch Jahre später noch Upvotes dafür. Bitte greifen Sie nicht zu dieser Antwort, dieantworte mitiptables
hier ist meiner Meinung nach weit überlegen.
tcpdump port 443 and '(tcp-syn|tcp-ack)!=0'
oder nur tcp-syn
, oder nur tcp-ack
(ich würde das vermuten), je nachdem, was Sie brauchen.
Antwort2
Sie können hierfür die iptables-Unterstützung im Linux-Kernel nutzen.Der Vorteil ist, dass keine zusätzliche Software erforderlich ist, um einigermaßen nützlich zu sein. Der Nachteil ist, dass für die Einrichtung Root-Berechtigungen erforderlich sind (aber da Sie über Port 443 sprechen, der ein privilegierter Port ist, benötigen Sie bei den meisten Lösungen wahrscheinlich Root-Berechtigungen).
Fügen Sie eine iptables-Regel mit etwas wie: hinzu.
sudo iptables -I INPUT -p tcp --dport 443 --syn -j LOG --log-prefix "HTTPS SYN: "
(Passen Sie das -I INPUT
Teil Ihrem Geschmack an.)
Wenn die Regel ausgelöst wird, wird vom Kernel ein Syslog-Eintrag ausgegeben. Bei einer Eingaberegel kann der Protokolleintrag beispielsweise wie folgt aussehen:
5. Dez 09:10:56 Hostname Kernel: [1023963.185332] HTTPS SYN: IN=ifX OUT= MAC=80:80:80:80:80:80:80:80:80:80:80:80:80:08:00 SRC=ABCD DST=WXYZ LEN=52 TOS=0x00 PREC=0x20 TTL=119 ID=11901 DF PROTO=TCP SPT=37287 DPT=443 WINDOW=8192 RES=0x00 SYN URGP=0
Sie können dann jedes gängige Protokollüberwachungstool verwenden, um mit diesen Informationen etwas Nützliches anzufangen. Wenn Ihre Syslog-Implementierung dies unterstützt, können Sie diese sogar in eine separate Protokolldatei leiten und so Ihre Anforderung erfüllen, die Verbindungsdaten ohne zusätzliche Software in eine sekundengenaue Datei mit Zeitstempel zu schreiben.
Beachten Sie, dass das LOG
Ziel ein nicht terminierendes Ziel ist. Dies bedeutet, dass alle darauf folgenden Regeln weiterhin ausgewertet werden und das Paket von der LOG-Regel selbst weder abgelehnt noch akzeptiert wird. Dies macht das LOG
Ziel auch zum Debuggen von Firewall-Regeln nützlich.
Um eine Überflutung Ihres Protokolls zu vermeiden, sollten Sie das limit
Modul in Verbindung damit verwenden. Weitere Informationen finden Sie auf der Manpage iptables(8).
Antwort3
Mikrosekundenauflösung
Standardmäßig ist dietcpdumpDas Dienstprogramm gibt die Zeit mit einer Auflösung von Mikrosekunden an. Beispiel:
$ sudo tcpdump -i any port 443
wird eine Ausgabe ähnlich der folgenden anzeigen:
12:08:14.028945 IP localhost.33255 > localhost.https: Flags [S], Sequenz 1828376761, Win 43690, Optionen [mss 65495,sackOK,TS val 108010971 ecr 0,nop,wscale 7], Länge 0
12:08:14.028959 IP localhost.https > localhost.33255: Flags [R.], Sequenz 0, ack 1828376762, Win 0, Länge 0
Eine vollständige Liste der TCPdump-Optionen finden Sie unter tcpdump(8) und die vollständige Syntax der verwendbaren Filter finden Sie unter pcap-filter(7).
Antwort4
Möglicherweise benötigen Sie dies auch, um die ein- und ausgehenden Pakete von anderen Maschinen zu überwachen.
tcpflow -i eth0 -c port 7891
(Option -i
zum Erwähnen des Netzwerks, Option -c
zum Drucken der Pakete in der Konsole)