GNU/Linux >> LINUX-Kenntnisse >  >> Linux

TCP-Verbindungen ohne tcpdump ausgeben

Lösung 1:

Ich würde wirklich versuchen, tcpdump zu bekommen. Abgesehen davon gibt es einige Alternativen, um zu sehen, ob eine bestimmte Verbindung für eine IP existiert:

Strich:

[[email protected]: ~] strace -e trace=network nc 1.2.3.4 1234
...
socket(PF_INET, SOCK_STREAM, IPPROTO_TCP) = 3
connect(3, {sa_family=AF_INET, sin_port=htons(1234), sin_addr=inet_addr("1.2.3.4")}, 16) = -1 EINPROGRESS (Operation now in progress)

lsof:

[[email protected]: ~] nc 1.2.3.4 1234 &
[1] 11434
[[email protected]: ~] lsof -p 11434
....
nc      11434 kbrandt    3u  IPv4 4543149      0t0     TCP 10.7.0.78:58886->1.2.3.4:search-agent (SYN_SENT)

netstat:

[[email protected]: ~] nc 1.2.3.4 1234 &
[1] 11486
[[email protected]: ~] sudo netstat -a -p | grep 11486
tcp        0      1 10.7.0.78:58891             1.2.3.4:search-agent        SYN_SENT    11486/nc

Lösung 2:

Sicher haben Sie python ?

from socket import * 
from struct import unpack 
import sys 

INTERFACE = "eth0"
TARGET = "8.8.8.8" 

if __name__ == "__main__": 
  sock = socket(AF_PACKET, SOCK_DGRAM, 0x0800) 
  sock.bind((INTERFACE, 0x0800)) 
  while True: 
    data = sock.recvfrom(1500, 0)[0] 
    ip = inet_ntop(AF_INET, data[12:16]) 
    if ip == TARGET: 
      print "GOT TARGET" 
      sys.exit(1)

Dies wird mit "GOT TARGET" beendet, vorausgesetzt, die zurückkommende IP-Adresse stimmt überein. Da TCP während eines Handshakes etwas zurücksenden muss, sollte dies alles von einer bestimmten Zieladresse abfangen. Es ist jedoch egal, ob das Protokoll TCP oder UDP ist (ich überprüfe es auch nicht).

Vergessen Sie nicht, TARGET und INTERFACE zu ändern.

Lösung 3:

Iptables hat eine Debug-Fähigkeit und kann auch für Verkehrsanalysen verwendet werden.

Die Lösung wird unter der URL unten beschrieben.

Debugging-Regeln in Iptables

Es lohnt sich auch, die folgende URL zu lesen, um die Protokollierung der Trace-Ausgabe in eine Datei Ihrer Wahl einzurichten.

http://backreference.org/2010/06/11/iptables-debugging/

Ich würde diese Lösung nicht mit tcpdump gleichsetzen, aber sie kann mit einer minimalen Installation von Centos durchgeführt werden. Sie müssen darauf achten, die Festplatte nicht mit den Protokollen zu füllen, da tcpdump bei der Festplattennutzung viel effizienter ist. Deaktivieren Sie die Protokollierung, wenn sie nicht benötigt wird.

Sie können Folgendes als grundlegende Vorlage in Ihrem Skript verwenden.

# Logging
log(){
SOURCE=a.b.c.d (IP address)
$IPT -A INPUT   -s $SOURCE -m limit --limit 50/minute -j LOG --log-level 7 --log-prefix "In: "
$IPT -A OUTPUT  -s $SOURCE -m limit --limit 50/minute -j LOG --log-level 7 --log-prefix "Out: "
$IPT -A FORWARD -s $SOURCE -m limit --limit 50/minute -j LOG --log-level 7 --log-prefix "Fw: "
$IPT -t nat -A POSTROUTING -m limit --limit 50/minute -j LOG --log-level 7 --log-prefix "Nat: "
}
#log  (remove comment to enable)

trace(){
iptables -t raw -A PREROUTING -p tcp  -j TRACE
iptables -t raw -A OUTPUT     -p tcp  -j TRACE
}
#trace (remove comment to enable)

Lösung 4:

Wenn Sie für Ihre Arbeit eine bestimmte Software benötigen und dies nicht dürfen, liefern Sie entweder kein gutes Geschäftsmodell oder Ihre Ideen an die richtigen Leute verkaufen... oder Sie haben dieses System nicht unter Kontrolle...

Wenn ich mit einer Aufgabe beauftragt würde und die Art von Debugging-/Fehlerbehebungsinformationen benötigen würde, die Sie in diesem Fall benötigen, würde ich das richtige Tool verwenden. Das ist wahrscheinlich tcpdump oder tshark . Ja, das sind Softwareteile, aber ich würde sie eher als wesentliche Dienstprogramme betrachten . Tatsächlich handelt es sich um Dienstprogramme, die vorübergehend auf dem System installiert oder geladen und ohne Zwischenfälle entfernt werden können (sind Wechselmedien eine Option?...Hinweis )

Aber der Punkt ist, dass eine ruckelige Umgehung der Unternehmensrichtlinie wahrscheinlich mehr Aufwand erfordert, als die Genehmigung für diesen Anwendungsfall zu erhalten.

Lösung 5:

Kyle bot einige großartige Optionen an. Eine weitere wäre die Verwendung von iptables :

[[email protected] ~]$ sudo iptables -I OUTPUT -d 1.2.3.4/32
...
[[email protected] ~]$ sudo iptables -L OUTPUT -n -v
Chain OUTPUT (policy ACCEPT 105 packets, 35602 bytes)
 pkts bytes target  prot opt in  out  source      destination
   87 33484 LOG     all  --  *   *    0.0.0.0/0   1.2.3.4     LOG flags 0 level 4

Dies ist im Wesentlichen eine Rechnungslegungsvorschrift. Es erlaubt oder verweigert den Datenverkehr nicht explizit, daher wird die Standardrichtlinie für die OUTPUT-Kette verwendet (die standardmäßig ACCEPT ist). Jedes übereinstimmende Paket erhöht jedoch die Zähler für die Regel.

Mit dem -j LOG können Sie optional auch Details über das Paket protokollieren Möglichkeit:

[[email protected] ~]$ sudo iptables -I OUTPUT -d 1.2.3.4/32 -j LOG
...
[[email protected] ~]@ dmesg | grep 1.2.3.4 | tail -1
IN= OUT=eth0 SRC=192.168.1.1 DST=1.2.3.4 LEN=100 TOS=0x10 PREC=0x00 TTL=64 ...

Protokolle werden an die Kernel-Protokollierungseinrichtung gesendet, daher sollten sie in /var/log/messages bei Red Hat-Derivaten und /var/log/kern.log bei Debian-Derivaten angezeigt werden. Es wäre auch in der Ausgabe von dmesg sichtbar , wie gezeigt. Im Gegensatz zu tcpdump , es wird jedoch nicht der vollständige Inhalt des Pakets protokolliert, sondern nur der Inhalt des Paket-Headers.


Linux
  1. Maximale TCP-Verbindungen zu Webservern begrenzen

  2. cp -r ohne versteckte Dateien

  3. Tomcat startet ohne Fehler, hört aber nicht auf 8080

  4. Rufen Sie die Anzahl der hergestellten TCP-Verbindungen ab

  5. Warum sind < oder > erforderlich, um /dev/tcp

Tcpdump-Befehl unter Linux

6 erweiterte tcpdump-Formatierungsoptionen

Dateien ohne Trennzeichen einfügen?

Linux-tcpdump-Befehl

Wie kann man den USB-Datenverkehr ausgeben?

PuTTY-, CygwinX- und X11-Weiterleitungsverbindung abgelehnt