GNU/Linux >> Belajar Linux >  >> Linux

tcpdump:bagaimana cara mendapatkan keluaran grepable?

Bagi yang seperti Anda yang tidak bisa menggunakan ngrep , berikut cara menggunakan awk untuk membuat tcpdump keluaran isi paket grepable.

Pertama beberapa contoh keluaran seperti yang disediakan oleh tcpdump -x , untuk mempresentasikan tugas di depan:

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

Dan ini adalah copy-and-pastable awk skrip Anda dapat menyalurkan output ke

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

untuk mendapatkan keluaran berikut yang dapat diterima

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

Di bawah ini adalah versi skrip di atas yang dikomentari:

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

Dari tcpdump halaman manual:

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

Pastikan Anda juga menggunakan -s 0 opsi untuk memastikan seluruh paket ditampilkan.


Linux
  1. Bagaimana Mengurutkan Du Output Berdasarkan Ukuran?

  2. Bagaimana Cara Mendapatkan Tipe Data Variabel Di Zsh?

  3. Bagaimana Agar Uuencode Berfungsi?

  1. Bagaimana Cara Mengingat Cara Menggunakan Redirection?

  2. Cara mendapatkan ukuran direktori di Linux

  3. Bagaimana cara mendapatkan ID proses dari proses latar belakang?

  1. Bagaimana cara mendapatkan ps untuk mencetak grup?

  2. Bagaimana cara mendapatkan semua id proses yang sedang berjalan saja?

  3. Bagaimana cara mendapatkan perintah teratas untuk membungkus hasilnya?