下载目录:http://digitalcorpora.org/downloads/tcpflow/
大多数常见的 GNU/Linux 发行版在其软件仓库中都包含了 tcpflow。因此在 Debian/Ubuntu 等系统上,可以运行:
sudo apt-get install tcpflow
在 Fedora/RedHat/CentOS 等系统上,可以运行:
sudo dnf install tcpflow
这样就完成了。如果由于某种原因上述方法不够好,你可以从源代码编译:
编译适用于 Linux 的版本
请确保你拥有必要的依赖。根目录下有一些脚本文件可以为你完成这些操作,具体取决于你的主机操作系统:
CONFIGURE_ARCH_17_8.sh CONFIGURE_FEDORA_18.sh CONFIGURE_FEDORA_26.sh CONFIGURE_UBUNTU_16_04.sh
根据你的操作系统,只需运行:
# sudo bash CONFIGURE_<你的操作系统>.sh
配置好操作系统后,编译并安装:
./configure
make
sudo make install
如果你想通过 git 下载开发版本,请确保使用 --recursive 进行完整检出,然后依次运行 bootstrap.sh、configure 和 make:
git clone --recursive https://github.com/simsong/tcpflow.git
cd tcpflow
bash bootstrap.sh
./configure
make
sudo make install
下载并编译适用于 Amazon AMI 的版本:
ssh ec2-user@<你的 ec2 实例>
sudo bash yum -y install git make gcc-c++ automake autoconf boost-devel cairo-devel libpcap-devel openssl-devel zlib-devel
git clone --recursive https://github.com/simsong/tcpflow.git
sh bootstrap.sh
在 Fedora Core 上使用 mingw 编译适用于 Windows 的版本:
yum -y install mingw64-gcc mingw64-gcc-c++ mingw64-boost mingw64-cairo mingw64-zlib
mingw64-configure
make
使用 CMake 的详细说明请参见:cmake/README.md
从干净的仓库开始,以普通用户身份(非 root)执行:
./bootstrap.sh # 生成 ./configure 文件
./configure # 生成 tcpflow.spec 文件
rpmbuild -bb tcpflow.spec --build-in-place
检查 spec 文件和生成的 RPM 包:
rpmlint tcpflow.spec
rpmlint ~/rpmbuild/RPMS/x86_64/tcpflow-....rpm
安装:
sudo dnf install ~/rpmbuild/RPMS/x86_64/tcpflow-....rpm
tcpflow 是一个捕获 TCP 连接(流)中传输的数据,并以便于协议分析和调试的方式存储数据的程序。每个 TCP 流存储在自己的文件中。因此,典型的 TCP 流会存储为两个文件,每个方向一个。tcpflow 还可以处理存储的 'tcpdump' 数据包流。
tcpflow 将所有捕获的数据存储在具有如下格式的文件中:
[时间戳T]源IP.源端口-目的IP.目的端口[--VLAN][cNNNN]
其中: timestamp 是可选的时间戳,表示首次看到数据包的时间 T 是一个分隔符,表示提供了时间戳 sourceip 是源 IP 地址 sourceport 是源端口 destip 是目的 IP 地址 destport 是目的端口 VLAN 是 VLAN 端口 c 是一个分隔符,表示存在多个连接 NNNN 是连接计数器,当存在多个具有相同 [时间]/源IP/源端口/目的IP/目的端口 组合的连接时使用。 注意,当使用时间戳前缀时,连接计数很少发生。
以下是一些示例:
128.129.130.131.02345-010.011.012.013.45103
上述文件的内容是从主机 128.129.131.131 端口 2345 传输到主机 10.11.12.13 端口 45103 的数据。
128.129.130.131.02345-010.011.012.013.45103c0005
从 128.129.131.131 端口 2345 到主机 10.11.12.13 端口 45103 的第六个连接。
1325542703T128.129.130.131.02345-010.011.012.013.45103
从 128.129.131.131 端口 2345 到主机 10.11.12.13 端口 45103 的一个连接,开始于 2012 年 1 月 2 日下午 5:19(-0500)。
128.129.130.131.02345-010.011.012.013.45103--3
从 128.129.131.131 端口 2345 到主机 10.11.12.13 端口 45103 的一个连接,在 VLAN 端口 3 上观察到。
你可以使用 -F 和 -T 选项更改用于创建文件名的模板。如果模板中包含目录,该目录将自动创建。
如果使用 -a 选项,tcpflow 将自动解释 HTTP 响应。
如果输出文件是
208.111.153.175.00080-192.168.001.064.37314,
那么后处理将创建以下文件:
208.111.153.175.00080-192.168.001.064.37314-HTTP
208.111.153.175.00080-192.168.001.064.37314-HTTPBODY
如果 HTTPBODY 是用 GZIP 压缩的,你还可能会得到第三个文件:
208.111.153.175.00080-192.168.001.064.37314-HTTPBODY-GZIP
这些流的其他信息,例如它们的 MD5 哈希值,也会写入 DFXML 文件。
tcpflow 类似于 'tcpdump',两者都处理来自网络或存储文件的包。但不同之处在于,tcpflow 重建实际的数据流,并将每个流存储在单独的文件中供后续分析。
tcpflow 理解序列号,并且能够正确重建数据流,无论存在重传或乱序交付。然而,tcpflow 目前不支持 IP 分片;包含 IP 分片的流将无法正确记录。
tcpflow 可以以 DFXML 格式输出汇总报告文件。该文件包含有关编译 tcpflow 程序的系统的信息、运行环境,以及每个 TCP 流的详细信息,包括源和目的 IP 地址与端口、字节数、包数,以及(可选)每个字节流的 MD5 哈希值。
tcpflow 使用 LBL 包捕获库(可从 ftp://ftp.ee.lbl.gov/libpcap.tar.Z 获取),因此支持与 'tcpdump' 等程序相同的丰富过滤表达式。它应该可以在大多数流行的 UNIX 版本下编译;详细信息请参阅 INSTALL 文件。
tcpflow 是理解网络包流和执行网络取证的有用工具。与 WireShark 等显示大量数据包或单个 TCP 连接的程序不同,tcpflow 可以上下文关联地显示数百、数千甚至数十万个 TCP 连接。
tcpflow 的一个常见用途是揭示 HTTP 会话的内容。使用 tcpflow,你可以重建通过 HTTP 下载的网页。你甚至可以提取作为“路过式下载”传递的恶意软件。
Jeremy Elson 最初编写这个程序是为了捕获使用未公开网络协议的各种程序发送的数据,以尝试对这些协议进行逆向工程。RealPlayer(以及大多数其他流媒体播放器)、ICQ 和 AOL IM 是这类应用的典型例子。后来它被用于 HTTP 协议分析。
Simson Garfinkel 于 1998 年创立了 Sandstorm Enterprises。Sandstorm 创建了一个类似于 tcpflow 的程序,名为 TCPDEMUX,以及另一个版本的程序,名为 NetIntercept。这些程序是商业产品。在 Simson 离开 Sandstorm 后,他需要一个 TCP 流重组程序。他找到了 tcpflow 并接手了维护工作。
请将错误提交到 github 问题追踪器
tcpflow 目前不支持 IP 分片。包含 IP 分片的流将无法正确记录。IP 分片越来越罕见,因此这似乎不是一个重大问题。
如果你正在撰写关于 tcpflow 的文章,请引用我们的技术报告:
Simson L. Garfinkel [email protected]
我继续将 bulk_extractor、tcpflow、be13_api 和 dfxml 移植到现代 C++。在调研了标准之后,我决定使用 C++17 而不是 C++14,因为对 17 的支持已经很普遍了。(我可能不需要 20)。我坚持使用 autotools,尽管似乎有强有力的理由迁移到 CMake。我将 be13_api 和 dfxml 保留为包含的模块,类似于 Python 风格,而不是将它们作为独立的库进行链接。不过,我并不 100% 确定这个决定是正确的。
该项目花费的时间比预期的要长,因为我同时在进行一般的代码重构。主要耗时的事情是理清所有与解析器选项和配置相关的 C++ 对象。
鉴于 tcpflow 和 bulk_extractor 都使用 be13_api,我的注意力已经转向使用 tcpflow 来使 be13_api 可用,因为它是一个更简单的程序。我现在大约完成了四分之三。我预计在 2020 年底之前完成一些工作。
—— Simson Garfinkel,2020 年 10 月 18 日
感谢: