文章目录
- 前言
- 一、tcpdump基础
- 命令选项详解
- 常规过滤规则
- tcpdump输出
- 二、tcpdump实践
- HTTP协议
- ICMP
- 状态抓包
- 三、Sniff Master抓包技巧
前言
当遇到网络疑难问题的时候,抓包是最基本的技能。无论是使用传统的tcpdump还是更现代的Sniff Master抓包工具,通过抓包才能看到网络底层的问题本质。本文将介绍tcpdump的基础用法,并分享一些专业抓包技巧。
一、tcpdump基础
tcpdump是一个常用的网络分析工具。它基于libpcap,利用内核中的AF_PACKET套接字,抓取网络接口中传输的网络包。
我们对网卡进行抓包的时候,会使得网卡进入"混杂模式",所谓混杂模式就是让网卡接收所有到达网卡的报文。使用tcpdump命令可以使网卡自动进入混杂模式,这一点可以从dmesg系统日志中看到: [311135.760098] device eth0 entered promiscuous mode [311142.852087] device eth0 left promiscuous mode
命令选项详解
- -i 指定网络接口(如 eth0 bond0)any表示所有接口
- -n 不对IP地址进行域名解析,直接显示IP,避免执行dns lookup
- -nn 不对IP地址和端口号进行名称解析。
- -c xx捕获包的数量
- -A 以ASCII码方式显示每一个数据包(不显示链路层头部信息). 在抓取包含网页数据的数据包时, 可方便查看数据
- -l 基于行的输出,便于你保存查看,或者交给其它工具分析
- -s tcpdump 默认只会截取前 96 字节的内容,要想截取所有的报文内容,可以使用 -s number
常规过滤规则
由于tcpdump是把经过网卡的报文全部都抓出来,所以数量是非常大的,各种乱七八糟的报文都有,是没办法定位问题的,所以tcpdump一定要配合过滤条件使用。
tcpdump输出
时间戳 协议 源地址,源端口 > 目的地址, 目的端口 网络包详细信息
TCP Packets TCP报头的控制部分有8位: CWR | ECE | URG | ACK | PSH | RST | SYN | FIN [S] SYN(开始连接) [.] ACK [P] PSH(推送数据) [F] FIN(结束连接) [R] RST(重置连接)
二、tcpdump实践
HTTP协议
抓取HTTP GET 流量:
$ tcpdump -s 0 -A -vv 'tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420'
抓取HTTP POST流量:
$ tcpdump -s 0 -A -vv 'tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x504f5354'
ICMP
抓取ICMP报文
tcpdump -n icmp
状态抓包
RST状态的包
tcpdump -i eth0 -nn port 34997 and 'tcp[tcpflags]&tcp-rst != 0'
三、Sniff Master抓包技巧
对于需要更高效抓包分析的场景,可以考虑使用Sniff Master这样的专业抓包工具。相比传统命令行工具,Sniff Master提供了以下优势:
- 可视化界面:直观展示网络流量,支持多种协议解析
- 智能过滤:内置多种常见协议过滤器,一键应用
- 流量统计:自动生成流量统计图表,便于分析
- 会话重组:支持TCP会话重组,完整还原通信过程
使用技巧:
- 对于HTTPS流量分析,可以配合SSL证书解密功能
- 使用"Follow TCP Stream"功能可以完整查看一个TCP连接的所有数据
- 设置自动保存功能可以长时间抓包而不占用过多内存
无论是tcpdump还是Sniff Master,掌握好抓包技巧都是网络工程师必备的技能。建议初学者先用tcpdump打好基础,再根据需要选择更专业的工具。