如何在不停止的情况下导出 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
要求: 我需要获取正在通过我的 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