【问题标题】:How to export tshark objects without stopping it如何在不停止的情况下导出 tshark 对象
【发布时间】:2020-09-03 05:39:47
【问题描述】:

要求: 我需要获取通过我的 wifi 接口下载的任何类型的文件/对象。

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

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

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

问题: 如何使用相同的命令/脚本导出通过不同协议下载的任何类型的对象。

约束:

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

【问题讨论】:

    标签: http networking packet-capture tshark


    【解决方案1】:

    使用 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
    

    【讨论】:

      【解决方案2】:

      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
      

      【讨论】:

        猜你喜欢
        • 2013-08-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-03
        • 1970-01-01
        • 2022-11-12
        • 2015-05-25
        • 2016-01-09
        相关资源
        最近更新 更多