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

tcpdump:Wie bekomme ich eine grepable Ausgabe?

Für diejenigen wie Sie, die ngrep nicht verwenden können , hier erfahren Sie, wie Sie awk verwenden um die tcpdump zu machen Ausgabe des Paketinhalts grepable.

Zuerst einige Beispielausgaben, wie sie von tcpdump -x bereitgestellt werden , um die bevorstehende Aufgabe zu präsentieren:

$ tcpdump -xr dump.pcap 2>/dev/null
12:04:59.590664 IP 10.17.14.93.51009 > 239.194.1.9.51009: UDP, length 370
        0x0000:  4500 018e 0000 4000 fa11 7625 0a11 0e5d
        0x0010:  efc2 0109 c741 c741 017a 6f28 1120 2020
        0x0020:  3337 3030 3039 3031 3835 3635 3430 3130
...

Und das ist der copy-and-pasteable awk Skript, an das Sie die Ausgabe weiterleiten können

awk '{ if (match($0, /^[0-9]/, _)) { printf (NR == 1 ? "%s " : "\n%s "), $0; fflush() } else { sub(/^\s+0x[0-9a-z]+:\s+/, " "); gsub(" ", ""); printf "%s", $0 } } END { print ""; fflush() }'

um die folgende, lesbare Ausgabe zu erhalten

12:04:59.590664 IP 10.17.14.93.51009 > 239.194.1.9.51009: UDP, length 370 4500018e00004000fa1176250a...
12:04:59.590798 IP 10.17.14.113.51011 > 239.194.1.11.51011: UDP, length 370 4500018e00004000fa11760f...
...

Unten ist eine kommentierte Version des obigen Skripts:

awk '{
    # if this is a header line
    if (match($0, /^[0-9]/, _)) {
        # print the header, but:

        # except for the first line,
        # we need to insert a newline,
        # as the preceding data lines
        # have been stripped of theirs

        # we also append a space to
        # separate header info from the
        # data that will get appended
        printf (NR == 1 ? "%s " : "\n%s "), $0
        # enforce line-buffering
        fflush()
    }
    # otherwise it is a data line
    else {
        # remove the data address
        sub(/^\s+0x[0-9a-z]+:\s+/, " ");
        # remove all spaces
        gsub(" ", "");
        # print w/o newline
        printf "%s", $0 
    }
}
END {
    # print final newline, as
    # the preceding data lines
    # have been stripped of theirs
    print ""
    # enforce line-buffering
    fflush()
}'

Aus dem tcpdump Handbuchseite:

-A      Print each packet (minus its link level header) in ASCII.  Handy
        for capturing web pages.

Stellen Sie sicher, dass Sie auch den -s 0 verwenden Option, um sicherzustellen, dass das gesamte Paket angezeigt wird.


Linux
  1. Wie sortiere ich die Ausgabe nach Größe?

  2. Wie erhalte ich einen Variablendatentyp in Zsh?

  3. Wie bekomme ich die Prozess-ID des Hintergrundprozesses?

  4. So erhalten Sie die CPU-Auslastung

  5. Wie bekomme ich ps zur Druckgruppe?

So erhalten Sie Ihre IP-Adresse unter Linux

So erhalten Sie die Verzeichnisgröße in Linux

Wie erhalte ich eine Ausgabe von gdb.execute in PythonGDB (GDB 7.1)?

Wie bekomme ich eine Liste von Verzeichnissen in einer ZIP-Datei?

So grep ps-Ausgabe mit Headern

Wie stoppe ich die Ping-Ausgabe?