说明

最近读了一篇论文,里面用到了SplitCap处理pcap文件,将里面的TCP流划分为单独的pcap文件。简单试了一下发现划分速度还挺快,顺手写了个脚本,因此写一篇纯基础教程来记录下这个过程,方便后面查看。

SplitCap

SplitCap是一款免费工具,用于将大型网络抓包文件(PCAP)按会话、IP地址、MAC地址等标准拆分为更小文件,提升分析效率,支持高效过滤和命令行操作,适合网络安全及流量分析场景。类似的工具其实不少,毕竟wireshark自身也可以做这种划分,或者也有功能更加全面的flowcontainer。但是相对来说都比SplitCap麻烦一点,并且SplitCap更加轻量化,不失为一个轻度使用时的选择。

准备工作

下载

SplitCap官方网站:chat.openai.com/auth/login

下载完之后会得到一个SplitCap.exe的文件,不用双击试图安装,没有图形化界面。

配置SplitCap环境变量(可选)

把下载的SplitCap.exe放到你的任何一个目录下,点击开始菜单搜索“环境变量”,打开进入环境变量配置界面:

点击环境变量,在系统变量中找到“Path”这一栏,点击编辑。

点击新建,将你的SplitCap.exe保存目录填进去:

打开终端,输入

splitcap

有如下输出证明你配置成功了:

SplitCap使用

SplitCap提供了相关的参数及说明,根据官方的说明和自己的需求选择,这里只说划分流的方法:

splitcap -r [待处理目录] -s flow -o [分割后文件的保存目录],例如:

splitcap -r D:\pcaps\email.pcap -s flow -o D:\tmp\data

如果需要递归对目录下所有文件进行分割,则增加一个参数-recursive

splitcap -r D:\pcaps -recursive -s flow -o D:\tmp\data

这样划分出来的流包含了TCP流和UDP流,我自己的需求是只想要TCP流,所以还需要去除掉UDP文件,每次都先分割再删除太麻烦了,写成了一个脚本合并了这两个过程。注意:如果你不是只需要TCP流那么需要对脚本简单修改后再使用

新建一个txt文件split.txt,把下面的代码复制进去,保存,然后修改文件后缀名为bat

@echo off
setlocal enabledelayedexpansion

:: Parameters:
:: %1 - Input directory (source pcap files)
:: %2 - Output directory (processed results)

:: Validate parameters
if "%~2"=="" (
echo Usage: %0 ^<InputDir^> ^<OutputDir^>
echo Example: %0 D:\pcaps\email D:\output\split_results
exit /b 1
)

:: Configure paths
set INPUT_DIR=%~1
set OUTPUT_DIR=%~2

:: Execute SplitCap
echo Splitting pcap files...
SplitCap.exe -r "%INPUT_DIR%" -recursive -s flow -o "%OUTPUT_DIR%"

:: Filter TCP files
echo Cleaning UDP files...
del /Q "%OUTPUT_DIR%\*UDP*.pcap*" 2>nul

echo Process completed! Output directory: %OUTPUT_DIR%
endlocal

打开终端,移动到你保存split.bat的地方,我直接保存在D盘根目录下:

D:

执行process_pcaps.bat [原始pcap目录] [输出目录],例如:

split.bat D:\pcaps\email D:\tmp\data\VPN_Data\VPN_SPLIT\TCP\email

效果如图: