tcpdump 是 linux 下最常用的抓包应用,这里记录下常见的用法和表达式语法。
抓取某个网卡下的所有包:
tcpdump -i eth0抓取来往 173.194.40.120 之间的所有包:
tcpdump host 173.194.40.120抓取来往 173.194.40.120:80 之间的所有包,并不解析主机名和端口名
tcpdump -nn -i any host 173.194.40.120 and port 80抓取来往 173.194.40.120:80 之间的所有包并展示 ASCII 码形式展示,且仅展示含有“User-Agent”的行
tcpdump -i any -A host 173.194.40.120 and port 80 | grep 'User-Agent'以 16 进制方式展示抓取内容,
tcpdump -x以 16 进制和 ASCII 码方式展示抓取内容
tcpdump -X表达式决定了哪些数据包被捕获,表达式由一个或多个表达元组成,每个表达元通常由一个或多个修饰符 + id 组成。
常见的三种不同的修饰符 type、dir 和 proto。
修饰符指定 id 所代表的对象类型。
修饰符描述 id 所对应的传输方向。
修饰符描述 id 所属的协议。
可选协议:
除以上所描述的表达元('primitive'), 还有其他形式的表达元, 并且与上述表达元格式不同. 比如: gateway, broadcast, less, greater 以及算术表达式,详情参考Linux tcpdump 命令详解。
-A 以ASCII码方式显示每一个数据包(不会显示数据包中链路层头部信息)。
-c count tcpdump 将在接受到 count 个数据包后退出。
-n 不对地址进行数字到名字的转换。
-nn 不对主机、端口号、协议等进行数字到名字的转换。
-x 当分析和打印时,tcpdump 会打印每个包的头部数据,同时会以 16 进制打印出每个包的数据(但不包括数据链路层的头部)。
-xx tcpdump 会打印每个包的头部数据,同时会以 16 进制打印出每个包的数据,其中包括数据链路层的头部。
-X 当分析和打印时, tcpdump 会打印每个包的头部数据,同时会以 16 进制和 ASCII 码形式打印出每个包的数据(但不包括连接层的头部).这对于分析一些新协议的数据包很方便。
-XX 当分析和打印时,tcpdump 会打印每个包的头部数据, 同时会以 16 进制和 ASCII 码形式打印出每个包的数据,其中包括数据链路层的头部。
-t 在每行输出中不打印时间戳。
-tt 每行打印时间戳。(nt: 这种格式一眼可能看不出其含义, 如时间戳打印成 1261798315)
-ttt 每两行打印之间会延迟一个段时间(以毫秒为单位)。
-tttt 在每行打印的时间戳之前添加日期的打印。
暂时没有留言