11.3. 流量相关

11.3.1. TCPDump

TCPDump是一款数据包的抓取分析工具,可以将网络中传送的数据包的完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供逻辑语句来过滤包。

11.3.1.1. 命令行常用选项

  • -B <buffer_size> 抓取流量的缓冲区大小,若过小则可能丢包,单位为KB

  • -c <count> 抓取n个包后退出

  • -C <file_size> 当前记录的包超过一定大小后,另起一个文件记录,单位为MB

  • -i <interface> 指定抓取网卡经过的流量

  • -n 不转换地址

  • -r <file> 读取保存的pcap文件

  • -s <snaplen> 从每个报文中截取snaplen字节的数据,0为所有数据

  • -q 输出简略的协议相关信息,输出行都比较简短。

  • -W <cnt> 写满cnt个文件后就不再写入

  • -w <file> 保存流量至文件
    • 按时间分包时,可使用strftime的格式命名,例如 %Y_%m_%d_%H_%M_%S.pcap

  • -G <seconds> 按时间分包

  • -v 产生详细的输出,-vv -vvv 会产生更详细的输出

  • -X 输出报文头和包的内容

  • -Z <user> 在写文件之前,转换用户

11.3.2. Bro

Bro是一个开源的网络流量分析工具,支持多种协议,可实时或者离线分析流量。

11.3.2.1. 命令行

  • 实时监控 bro -i <interface> <list of script to load>

  • 分析本地流量 bro -r <pcapfile> <scripts...>

  • 分割解析流量后的日志 bro-cut

11.3.2.2. 脚本

为了能够扩展和定制Bro的功能,Bro提供了一个事件驱动的脚本语言。

11.3.3. tcpflow

tcpflow也是一个抓包工具,它的特点是以流为单位显示数据内容,在分析HTTP等协议的数据时候,用tcpflow会更便捷。

11.3.3.1. 命令行常用选项

  • -b max_bytes 定义最大抓取流量

  • -e name 指定解析的scanner

  • -i interface 指定抓取接口

  • -o outputdir 指定输出文件夹

  • -r file 读取文件

  • -R file 读取文件,但是只读取完整的文件

11.3.4. tshark

WireShark的命令行工具,可以通过命令提取自己想要的数据,可以重定向到文件,也可以结合上层语言来调用命令行,实现对数据的处理。

11.3.4.1. 输入接口

  • -i <interface> 指定捕获接口,默认是第一个非本地循环接口

  • -f <capture filter> 设置抓包过滤表达式,遵循libpcap过滤语法,这个选项在抓包的过程中过滤,如果是分析本地文件则用不到

  • -s <snaplen> 设置快照长度,用来读取完整的数据包,因为网络中传输有65535的限制,值0代表快照长度65535,默认为65535

  • -p 以非混合模式工作,即只关心和本机有关的流量

  • -B <buffer size> 设置缓冲区的大小,只对windows生效,默认是2M

  • -y <link type> 设置抓包的数据链路层协议,不设置则默认为 -L 找到的第一个协议

  • -D 打印接口的列表并退出

  • -L 列出本机支持的数据链路层协议,供-y参数使用。

  • -r <infile> 设置读取本地文件

11.3.4.2. 捕获停止选项

  • -c <packet count> 捕获n个包之后结束,默认捕获无限个

  • -a <autostop cond>
    • duration:NUM 在num秒之后停止捕获

    • filesize:NUM 在numKB之后停止捕获

    • files:NUM 在捕获num个文件之后停止捕获

11.3.4.3. 处理选项

  • -Y <display filter> 使用读取过滤器的语法,在单次分析中可以代替 -R 选项

  • -n 禁止所有地址名字解析(默认为允许所有)

  • -N 启用某一层的地址名字解析。 m 代表MAC层, n 代表网络层, t 代表传输层, C 代表当前异步DNS查找。如果 -n-N 参数同时存在, -n 将被忽略。如果 -n-N 参数都不写,则默认打开所有地址名字解析。

  • -d 将指定的数据按有关协议解包输出,如要将tcp 8888端口的流量按http解包,应该写为 -d tcp.port==8888,http 。可用 tshark -d 列出所有支持的有效选择器。

11.3.4.4. 输出选项

  • -w <outfile> 设置raw数据的输出文件。不设置时为stdout

  • -F <output file type> 设置输出的文件格式,默认是 .pcapng,使用 tshark -F 可列出所有支持的输出文件类型

  • -V 增加细节输出

  • -O <protocols> 只显示此选项指定的协议的详细信息

  • -P 即使将解码结果写入文件中,也打印包的概要信息

  • -S <separator> 行分割符

  • -x 设置在解码输出结果中,每个packet后面以HEX dump的方式显示具体数据

  • -T pdml|ps|text|fields|psml 设置解码结果输出的格式,默认为text

  • -e 如果 -T 选项指定, -e 用来指定输出哪些字段

  • -t a|ad|d|dd|e|r|u|ud 设置解码结果的时间格式

  • -u s|hms 格式化输出秒

  • -l 在输出每个包之后flush标准输出

  • -q 结合 -z 选项进行使用,来进行统计分析

  • -X <key>:<value> 扩展项,lua_script、read_format

  • -z 统计选项,具体的参考文档

11.3.4.5. 其他选项

  • -h 显示命令行帮助

  • -v 显示tshark的版本信息