GNU/Linux >> Tutoriels Linux >  >> Linux

tcpdump :comment obtenir une sortie grepable ?

Pour ceux comme vous qui ne savent pas utiliser ngrep , voici comment utiliser awk faire le tcpdump sortie du contenu du paquet grepable.

Tout d'abord, un exemple de sortie fourni par tcpdump -x , afin de présenter la tâche à venir :

$ 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
...

Et c'est le copier-coller awk script vers lequel vous pouvez rediriger la sortie

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() }'

afin d'obtenir la sortie grepable suivante

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...
...

Vous trouverez ci-dessous une version commentée du script ci-dessus :

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()
}'

Du tcpdump page de manuel :

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

Assurez-vous d'utiliser également le -s 0 option pour s'assurer que le paquet entier est affiché.


Linux
  1. Comment trier la sortie par taille ?

  2. Comment obtenir un type de données Variables dans Zsh ?

  3. Comment faire fonctionner Uuencode ?

  4. Comment se rappeler comment utiliser la redirection ?

  5. Comment créer une sortie virtuelle dans Pulseaudio ?

Comment obtenir votre adresse IP sous Linux

Comment obtenir l'ID de processus du processus d'arrière-plan ?

Comment obtenir l'utilisation du processeur

Comment obtenir ps pour imprimer le groupe?

comment obtenir sha1sum pour sortir le binaire?

Comment puis-je trier la sortie du -h par taille