it-swarm.com.de

Monitor TCP Datenverkehr auf einem bestimmten Port

Ich habe ziemlich ausgiebig danach gesucht, kann aber anscheinend kein funktionierendes Beispiel finden.

Mein Ziel ist es, den TCP Datenverkehr auf einem bestimmten Port zu überwachen, um eingehende Verbindungen zu erkennen und in eine Textdatei zu schreiben. Der Haken ist, ich brauche auch einen Zeitstempel in jeder Zeile, um genau zu zeigen, wann der Client eine Verbindung zum zweiten hergestellt hat.

Ich habe bereits netstat, nmap und tcptrack erschöpft, aber keiner unterstützt Timestamp.

Ich dachte, ein Linux-Shell-Skript könnte funktionieren, wenn ich einen bestimmten lokalen Port überwachte und beim Herstellen einer Verbindung Text in eine Datei schrieb und dann das Datum in jeder Zeile verkettete.

Ich habe damit gespielt:

netstat -ano|grep 443|grep ESTABLISHED

so gut wie das:

tcptrack -i eth0 port 443

aber beides passt nicht zu meinen Bedürfnissen, da ich die Zeit benötige, in der die Verbindung hergestellt wird.

Wenn Sie Vorschläge haben oder mich in die richtige Richtung lenken könnten, wären wir Ihnen sehr dankbar.

Vielen Dank. :)

46
tajonny07

edit : Ich bekomme noch Stimmen für diese Jahre später. Bitte gehen Sie nicht für diese Antwort, die Antwort mit iptables hier ist meiner Meinung nach weit überlegen.


tcpdump port 443 and '(tcp-syn|tcp-ack)!=0'

oder nur tcp-syn oder nur tcp-ack (das würde ich mir denken), je nachdem, was Sie brauchen.

62
Wrikken

Sie können die Iptables-Unterstützung im Linux-Kernel dafür verwenden. Der Vorteil ist, dass keine zusätzliche Software erforderlich ist, um mäßig nützlich zu sein. Der Nachteil ist, dass zum Einrichten Root-Rechte erforderlich sind (da es sich jedoch um Port 443 handelt, bei dem es sich um einen privilegierten Port handelt, benötigen Sie bei den meisten Lösungen wahrscheinlich Root-Rechte).

Fügen Sie eine iptables-Regel hinzu, die wie folgt lautet:

Sudo iptables -I INPUT -p tcp --dport 443 --syn -j LOG --log-prefix "HTTPS SYN: "

(Passen Sie den -I INPUT Teil an Ihren Geschmack an.)

Wenn die Regel ausgelöst wird, wird vom Kernel ein Syslog-Eintrag ausgegeben. Bei einer Eingaberegel sieht der Protokolleintrag beispielsweise folgendermaßen aus:

5. Dezember 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: 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 zu tun. Wenn Ihre Syslog-Implementierung dies unterstützt, können Sie diese sogar in eine separate Protokolldatei umleiten, wodurch Ihre Anforderung erfüllt wird, die Verbindungsdaten ohne zusätzliche Software in eine sekundengenaue Datei zu schreiben.

Beachten Sie, dass das Ziel LOG 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 Ziel LOG auch zum Debuggen von Firewall-Regeln nützlich.

Verwenden Sie in diesem Zusammenhang das Modul limit, um ein Überfluten des Protokolls zu vermeiden. Weitere Informationen finden Sie auf der Manpage iptables (8).

25
a CVn

Mikrosekundenauflösung

Standardmäßig gibt das Dienstprogramm tcpdump die Zeit in Mikrosekundenauflösung aus. Zum Beispiel:

$ Sudo tcpdump -i any port 443

zeigt eine Ausgabe ähnlich der folgenden:

12: 08: 14.028945 IP localhost.33255> localhost.https: Flags [S], seq 1828376761, win 43690, options [mss 65495, sackOK, TS val 108010971 ecr 0, nop, wscale 7], length 0
12: 08: 14.028959 IP localhost.https> localhost.33255: Flags [R.], seq 0, ack 1828376762, win 0, length 0

Siehe tcpdump (8) für eine vollständige Liste der tcpdump-Optionen und pcap-filter (7) für die vollständige Syntax der Filter, die Sie verwenden können.

24
CodeGnome

443 ist verschlüsselter Datenverkehr - so schwierig, den Datenverkehr auf diesem Port ohnehin zu verdrehen:

du kannst tun

yum install ngrep oder apt-get install ngrep

dann renne

ngrep -W byline -d any port 443 -q
3
Vahid

Dies kann auch erforderlich sein, um eingehende und ausgehende Pakete von anderen Computern zu überwachen.

tcpflow -i eth0 -c port 7891

(Option -i zum Erwähnen des Netzwerks, Option -c zum Drucken der Pakete in der Konsole)

2
reegan vijay

Sie können tcpdump oder Wireshark verwenden.

0
sigjuice

Wenn Sie eine permanente Lösung benötigen, die den Datenverkehr in den Ports von Interesse überwacht, empfehle ich die Verwendung von QoS (der Befehl tc unter Linux). tc ist ein bisschen kryptisch und undokumentiert, daher verwende ich FireQoS, um QoS und Netzdaten für die Echtzeitüberwachung einzurichten.

Überprüfen Sie dies für weitere Informationen: https://github.com/firehol/netdata/wiki/You-should-install-QoS-on-all-your-servers

0
Costa Tsaousis