文章插图
tcpdump 是linux系统下的一个强大的命令,可以将网络中传送的数据包完全截获下来提供分析 。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息 。
本教程对tcpdump命令使用进行讲解说明,通过本教程您可以学会linux系统下使用tcpdump命令进行网络抓包,实现对数据包进行捕获分析 。
tcpdump 命令格式介绍
首先我们对Linux系统下tcpdump命令格式进行一个介绍说明,在下面的使用教程中讲到tcpdump命令示例时,您就可以参考tcpdump命令参数说明进行学习 。
该命令示例在centos release 6.10 (Final) 中tcpdump演示语法:
tcpdump [ -AdDefIJKlLnNOpqRStuUvxX ] [ -B buffer_size ] [ -c count ]
[ -C file_size ] [ -G rotate_seconds ] [ -F file ]
[ -i interface ] [ -j tstamp_type ] [ -m module ] [ -M secret ]
[ -Q|-P in|out|inout ]
[ -r file ] [ -s snaplen ] [ -T type ] [ -w file ]
[ -W filecount ]
[ -E spi@ipaddr algo:secret,... ]
[ -y datalinktype ] [ -z postrotate-command ] [ -Z user ]
[ expression ]
命令行参数介绍:
- -A 以ASCII格式打印出所有分组,并将链路层的头最小化 。
- -c 在收到指定的数量的分组后,tcpdump就会停止 。
- -C 在将一个原始分组写入文件之前,检查文件当前的大小是否超过了参数file_size
- 中指定的大小 。如果超过了指定大小,则关闭当前文件,然后在打开一个新的文件 。参数 file_size
- 的单位是兆字节(是1,000,000字节,而不是1,048,576字节) 。
- -d 将匹配信息包的代码以人们能够理解的汇编格式给出 。
- -dd 将匹配信息包的代码以C语言程序段的格式给出 。
- -ddd 将匹配信息包的代码以十进制的形式给出 。
- -D 打印出系统中所有可以用tcpdump截包的网络接口 。
- -e 在输出行打印出数据链路层的头部信息 。
- -E 用spi@ipaddr algo:secret解密那些以addr作为地址,并且包含了安全参数索引值spi的IPsec ESP分组 。
- -f 将外部的Internet地址以数字的形式打印出来 。
- -F 从指定的文件中读取表达式,忽略命令行中给出的表达式 。
- -i 指定监听的网络接口 。
- -l 使标准输出变为缓冲行形式 。
- -L 列出网络接口的已知数据链路 。
- -m 从文件module中导入SMI MIB模块定义 。该参数可以被使用多次,以导入多个MIB模块 。
- -M 如果tcp报文中存在TCP-MD5选项,则需要用secret作为共享的验证码用于验证TCP-MD5选选项摘要(详情可参考RFC 2385) 。
- -n 不把网络地址转换成名字 。
- -N 不输出主机名中的域名部分 。例如,link.linux265.com 只输出link 。
- -t 在输出的每一行不打印时间戳 。
- -O 不运行分组分组匹配(packet-matching)代码优化程序 。
- -P 不将网络接口设置成混杂模式 。
- -q 快速输出 。只输出较少的协议信息 。
- -r 从指定的文件中读取包(这些包一般通过-w选项产生) 。
- -S 将tcp的序列号以绝对值形式输出,而不是相对值 。
- -s 从每个分组中读取最开始的snaplen个字节,而不是默认的68个字节 。
- -T 将监听到的包直接解释为指定的类型的报文,常见的类型有rpc远程过程调用)和snmp(简单网络管理协议;) 。
- -t 不在每一行中输出时间戳 。
- -tt 在每一行中输出非格式化的时间戳 。
- -ttt 输出本行和前面一行之间的时间差 。
- -tttt 在每一行中输出由date处理的默认格式的时间戳 。
- -u 输出未解码的NFS句柄 。
- -v 输出一个稍微详细的信息,例如在ip包中可以包括ttl和服务类型的信息 。
- -vv 输出详细的报文信息 。
- -w 直接将分组写入文件中,而不是不分析并打印出来 。
- -x 以16进制数形式显示每一个报文 (去掉链路层报头) . 可以显示较小的完整报文, 否则只显示snaplen个字节.
- -xx 以16进制数形式显示每一个报文(包含链路层包头) 。
- -X 以16进制和ASCII码形式显示每个报文(去掉链路层报头) 。
- -XX 以16进制和ASCII吗形式显示每个报文(包含链路层报头) 。
- -y 设置tcpdump 捕获数据链路层协议类型
- -Z 使tcpdump 放弃自己的超级权限(如果以root用户启动tcpdump, tcpdump将会有超级用户权限), 并把当前tcpdump的用户ID设置为user, 组ID设置为user首要所属组的ID
linux系统下执行tcpdump命令需要root账号或者具备sudo权限的账号,否则执行tcpdump命令说,系统会提示tcpdump: no suitable device found 。
推荐阅读
- 十几年linux运维工程师的工作经验分享
- Linux+apache 跨域配置
- 手机系统越升级越卡顿?这个说法是真的吗?
- 安卓系统无处不在的恶心下载陷阱,有什么方法可以对付?
- 苹果在新系统中改进了对APFS的支持
- Java如何设计系统接口?
- Linux 如何查看系统负载
- 分布式系统中"身份证"是如何生成的?
- 手机操作系统分类
- 三星演示新系统:用AI无人机检测5G网络基站 降低工程师风险