如何在不停止的情况下导出 tshark 对象

How to export tshark objects without stopping it

要求: 我需要获取正在通过我的 wifi 接口下载的任何类型的 files/objets。

我正在 运行ning tshhark 来监听我的 wifi 接口并使用以下命令将 HTTP 对象导出到给定目录。

 tshark -i wlp4s0 --export-object "http,/tmp/tshark-objects/"

它成功拦截了对象,但不会自动将它们写入指定路径,除非我使用“Ctrl+C”手动停止 tshark。

问题: 如何使用相同的 command/script.

导出通过不同协议下载的任何类型的对象

约束条件:

我希望 tshark 持续 运行 并在对象通过网络传输后立即导出它们。 PS 使用 tshark 对我来说不是强制性的。如果满足此要求,我可以切换到其他工具。

使用 2 个 tshark 进程

答案是你应该用不同的tshark进程来编写和导出。这可以通过根据条件创建新文件来通过文件轮换来完成。您可以使用几个不同的选项:

 -b <ringbuffer opt.> ..., --ring-buffer <ringbuffer opt.>
                           duration:NUM - switch to next file after NUM secs
                           filesize:NUM - switch to next file after NUM KB
                              files:NUM - ringbuffer: replace after NUM files
                            packets:NUM - switch to next file after NUM packets
                           interval:NUM - switch to next file when the time is
                                          an exact multiple of NUM secs

例如,每分钟旋转一次,使用

$ tshark -b duration:60 -w output.pcap

要从出现的新文件中导出对象,您需要监视文件系统中的新文件。您可以在 linux 上使用 inotify,在 osx 上使用 fswatch,或在其他平台上使用类似的实用程序。

将新文件发送到 tshark 进行导出

在这里,每个新文件都会触发文件的 tshark 导出。在两者中使用 -Q 以防止 tshark 在每个传入的截断文件中打印数据包。

fswatch (Mac)

$ tshark -b duration:60 -w output.pcap
$ fswatch . | while read f
do tshark -r $f -Q --export-object "http,/tmp/tshark-objects/"
done

inotifywait (Linux)

$ tshark -b duration:60 -w output.pcap
$ inotifywait . -m -e "CLOSE" --format "%f" | while read f
do tshark -r $f -Q --export-object "http,/tmp/tshark-objects/"
done

Ross Jacobs 的回答起到了主要作用。我使用它时做了一些小调整,如下所示:

#!/bin/bash

TARGET=/tmp/tshark-dumps/unprocessed/
PROCESSED=/tmp/tshark-dumps/processed/

inotifywait -m -e "CLOSE" --format "%f" $TARGET \
        | while read FILENAME
                do
                        echo Detected $TARGET$FILENAME, processing
                        if [[ -f $TARGET$FILENAME ]]; then

                        tshark -r "$TARGET$FILENAME" -Q --export-object "http,/tmp/tshark-objects/"
                        mv "$TARGET$FILENAME" "$PROCESSED$FILENAME"
                        gzip "$PROCESSED$FILENAME"
                        fi
                done