抓包神器 tcpdump 使用介绍
tcpdump 命令使用简介
简单介绍
tcpdump 是一款强大的网络抓包工具,运行在 linux 平台上。熟悉 tcpdump 的使用能够帮助你分析、调试网络数据。
要想使用很好地掌握 tcpdump, 必须对网络报文(TCP/IP 协议)有一定的了解。不过对于简单的使用来说,只要有网络基础概念就行了。
tcpdump 是一个很复杂的命令,想了解它的方方面面非常不易,也不值得推荐,能够使用它解决日常工作中的问题才是关键。
选项
tcpdump 的选项也很多,要想知道所有选项的话,请参考 man tcpdump,下面只记录 tcpdump 最常用的选项。
需要注意的是,tcpdump 默认只会截取前 96 字节的内容,要想截取所有的报文内容,可以使用 -s number, number 就是你要截取的报文字节数,如果是 0 的话,表示截取报文全部内容。
-n表示不要解析域名,直接显示 ip。-nn不要解析域名和端口-X同时用 hex 和 ascii 显示报文的内容。-XX同-X,但同时显示以太网头部。-S显示绝对的序列号(sequence number),而不是相对编号。-i any监听所有的网卡-v, -vv, -vvv:显示更多的详细信息-c number: 截取 number 个报文,然后结束-A: 只使用 ascii 打印报文的全部数据,不要和-X一起使用。截取 http 请求的时候可以用sudo tcpdump -nSA port 80!
简单使用
1. tcpdump -nS
监听所有端口,直接显示 ip 地址。
2. tcpdump -nnvvS
显示更详细的数据报文,包括 tos, ttl, checksum 等。
3. tcpdump -nnvvXS
显示数据报的全部数据信息,用 hex 和 ascii 两列对比输出。
下面是抓取 ping 命令的请求和返回的两个报文,可以看到全部的数据。
➜ ~ sudo tcpdump -nnvXSs -c2 icmp
tcpdump: data link type PKTAP
tcpdump: listening on pktap, link-type PKTAP (Packet Tap), capture size bytes ::16.781856 IP (tos 0x0, ttl , id , offset , flags [none], proto ICMP (), length )
192.168.1.106 > 192.168.1.1: ICMP echo request, id , seq , length
0x0000: 0c72 2c28 b9ac 80e6 4c38 .r,(....P.L8..E.
0x0010: f00c 06e1 c0a8 016a c0a8 .T....@......j..
0x0020: 72c9 ff16 000b ....r.....U.X...
0x0030: ee08 0a0b 0c0d 0e0f ................
0x0040: 1a1b 1c1d 1e1f ...........!"#$%
0x0050: 2a2b 2c2d 2e2f &'()*+,-./012345
0x0060:
::17.674304 IP (tos 0x0, ttl , id , offset , flags [none], proto ICMP (), length )
192.168.1.1 > 192.168.1.106: ICMP echo reply, id , seq , length
0x0000: 80e6 4c38 0c72 2c28 b9ac ..P.L8.r,(....E.
0x0010: c059 c0a8 c0a8 .T6...@..Y......
0x0020: 016a 7ac9 ff16 000b .j..z.....U.X...
0x0030: ee08 0a0b 0c0d 0e0f ................
0x0040: 1a1b 1c1d 1e1f ...........!"#$%
0x0050: 2a2b 2c2d 2e2f &'()*+,-./012345
0x0060: packets captured
packets received by filter
packets dropped by kernel
过滤器
机器上的网络报文数量异常的多,很多时候我们只关系和具体问题有关的数据报(比如访问某个网站的数据,或者 icmp 超时的报文等等),而这些数据只占到很小的一部分。把所有的数据截取下来,从里面找到想要的信息无疑是一件很费时费力的工作。而 tcpdump 提供了灵活的语法可以精确地截取关心的数据报,简化分析的工作量。这些选择数据包的语句就是过滤器(filter)!
过滤器也可以简单地分为三类:type, dir 和 proto。
Type 让你区分报文的类型,主要由 host(主机), net(网络) 和 port(端口) 组成。src 和 dst 也可以用来过滤报文的源地址和目的地址。
host: 过滤某个主机的数据报文
tcpdump host 1.2.3.4
src, dst: 过滤源地址和目的地址
tcpdump src 2.3.4.5
tcpdump dst 3.4.5.6
net: 过滤某个网段的数据,CIDR 模式
tcpdump net 1.2.3.0/
proto: 过滤某个协议的数据,支持 tcp, udp 和 icmp。使用的时候可以省略 proto 关键字。
tcpdump icmp
port: 过滤通过某个端口的数据报
tcpdump port
src/dst, port, protocol: 结合三者
tcpdump src port and tcp
tcpdump udp and src port
此外还有指定端口和数据报文范围的过滤器:
port 范围
tcpdump portrange -
数据报大小,单位是字节
tcpdump less
tcpdump greater
tcpdump >
tcpdump <=
过于过滤器的更多详细信息,请访问 tcpdump 官方 map page 的 PCAP-FILTER 部分。
输出到文件
使用 tcpdump 截取数据报文的时候,默认会打印到屏幕的默认输出,你会看到按照顺序和格式,很多的数据一行行快速闪过,根本来不及看清楚所有的内容。不过,tcpdump 提供了把截取的数据保存到文件的功能,以便后面使用其他图形工具(比如 wireshark,Snort)来分析。
-w 选项用来把数据报文输出到文件,比如下面的命令就是把所有 80 端口的数据导入到文件
# sudo tcpdump -w capture_file.pcap port
-r 可以读取文件里的数据报文,显示到屏幕上。
# tcpdump -nXr capture_file.pcap host web30
NOTE:保存到文件的数据不是屏幕上看到的文件信息,而是包含了额外信息的固定格式 pcap,需要特殊的软件来查看,使用 vim 或者 cat 命令会出现乱码。
强大的过滤器
过滤的真正强大之处在于你可以随意组合它们,而连接它们的逻辑就是常用的 与/AND/&&、 或/OR/|| 和 非/not/!。
源地址是 10.5.2.3,目的端口是 3389 的数据报
tcpdump -nnvS src 10.5.2.3 and dst port
从 192.168 网段到 10 或者 172.16 网段的数据报
tcpdump -nvX src net 192.168.0.0/ and dat net 10.0.0.0/ or 172.16.0.0/
从 Mars 或者 Pluto 发出的数据报,并且目的端口不是 22
tcpdump -vv src mars or pluto and not dat port
从上面的例子就可以看出,你可以随意地组合之前的过滤器来截取自己期望的数据报,最重要的就是知道自己要精确匹配的数据室怎样的!
对于比较复杂的过滤器表达式,为了逻辑的清晰,可以使用括号。不过默认情况下,tcpdump 把 () 当做特殊的字符,所以必须使用单引号 ' 来消除歧义:
tcpdump -nvv -c 'src 10.0.2.4 and (dat port 3389 or 22)'
理解 tcpdump 的输出
截取数据只是第一步,第二步就是理解这些数据,下面就解释一下 tcpdump 命令输出各部分的意义。
::06.995846 IP (tos 0x0, ttl , id , offset , flags [DF], proto TCP (), length )
192.168.1.106. > 124.192.132.54.: Flags [S], cksum 0xa730 (correct), seq , win , options [mss ,nop,wscale ,nop,nop,TS val ecr ,sackOK,eol], length ::07.030487 IP (tos 0x0, ttl , id , offset , flags [DF], proto TCP (), length )
124.192.132.54. > 192.168.1.106.: Flags [S.], cksum 0xedc0 (correct), seq , ack , win , options [mss ], length ::07.030527 IP (tos 0x0, ttl , id , offset , flags [DF], proto TCP (), length )
192.168.1.106. > 124.192.132.54.: Flags [.], cksum 0x3e72 (correct), ack , win , length
最基本也是最重要的信息就是数据报的源地址/端口和目的地址/端口,上面的例子第一条数据报中,源地址 ip 是 192.168.1.106,源端口是 56166,目的地址是 124.192.132.54,目的端口是 80。 > 符号代表数据的方向。
此外,上面的三条数据还是 tcp 协议的三次握手过程,第一条就是 SYN 报文,这个可以通过 Flags [S] 看出。下面是常见的 TCP 报文的 Flags:
[S]: SYN(开始连接)[.]: 没有 Flag[P]: PSH(推送数据)[F]: FIN (结束连接)[R]: RST(重置连接)
而第二条数据的 [S.] 表示 SYN-ACK,就是 SYN 报文的应答报文。
参考文档
本文主要参考了下面两篇文章,算是翻译和二次创作。
抓包神器 tcpdump 使用介绍的更多相关文章
- 抓包神器 tcpdump 使用介绍 (转)
tcpdump 命令使用简介 简单介绍 tcpdump 是一款强大的网络抓包工具,运行在 linux 平台上.熟悉 tcpdump 的使用能够帮助你分析.调试网络数据. 要想使用很好地掌握 tcpdu ...
- 超详细的网络抓包神器 tcpdump 使用指南
原文链接:Tcpdump 示例教程 本文主要内容翻译自<Tcpdump Examples>. tcpdump 是一款强大的网络抓包工具,它使用 libpcap 库来抓取网络数据包,这个库在 ...
- linux抓包工具tcpdump基本使用
tcpdump 是一款灵活.功能强大的抓包工具,能有效地帮助排查网络故障问题. tcpdump 是一个命令行实用工具,允许你抓取和分析经过系统的流量数据包.它通常被用作于网络故障分析工具以及安全工具. ...
- 网络异常时抓包操作说明tcpdump+Wireshark
转债至 https://help.aliyun.com/knowledge_detail/40564.html?spm=5176.11065259.1996646101.searchclickresu ...
- linux抓包命令-tcpdump命令详解
最近调试支付接口的时候,遇到了一个奇怪的问题:我按照支付接口文档,对接支付通道,当消费业务正常后,调试查余和冲正的时候,支付通道的对接技术告诉我,系统没有我们支付系统的请求报文,数据库和日志中都没有, ...
- Linux抓包工具tcpdump
Linux抓包工具tcpdump http://www.xuchanggang.cn/archives/1107.html
- Mac平台下的抓包神器 —— Charles
在开发界,“抓包”这个词想必大家耳熟能详.通过抓包工具,能够获取设备在网络通讯过程中的交换数据包.在 Windows 平台上,笔者使用较多的是 Fiddler 工具,但是由于 Fiddle 使用 C# ...
- 测试必备工具之最强抓包神器 Charles,你会了么?
前言 作为软件测试工程师,大家在工作中肯定经常会用到各种抓包工具来辅助测试,比如浏览器自带的抓包工具-F12,方便又快捷:比如时下特别流行的Fiddler工具,使用各种web和APP测试的各种场景 ...
- [转] Linux抓包工具tcpdump详解
http://www.ha97.com/4550.html PS:tcpdump是一个用于截取网络分组,并输出分组内容的工具,简单说就是数据包抓包工具.tcpdump凭借强大的功能和灵活的截取策略,使 ...
随机推荐
- 李宏毅机器学习笔记6:Why deep、Semi-supervised
李宏毅老师的机器学习课程和吴恩达老师的机器学习课程都是都是ML和DL非常好的入门资料,在YouTube.网易云课堂.B站都能观看到相应的课程视频,接下来这一系列的博客我都将记录老师上课的笔记以及自己对 ...
- Hystrix快速入门
祝大家国庆快乐! 对大部分电商和快递公司来说,每年年底(Q4季度)由于双11等大促活动的存在,将面对大量的用户流量,尤其是属于大促的那几天,无论是用户的商品订单还是物流订单,都将是平时的3倍以上.对于 ...
- asp.net core 依赖注入实现全过程粗略剖析(1)
转载请注明出处: https://home.cnblogs.com/u/zhiyong-ITNote/ 常用扩展方法 注入依赖服务: new ServiceCollection().AddSingle ...
- re模块、hashlib模块
一.re模块 1.什么是正则? 正则就是用一系列具有特殊含义的字符组成一套规则,该规则用来描述具有某一特征的字符串,正则就是用来去一个大的字符串中匹配出符合规则的子字符串 2.为何要用正则? 用户注册 ...
- 南阳171----聪明的kk
//简单的dp #include<cstdio> #define Max(a,b) ((a)>(b)?(a):(b)) ]; int main() { int i,j,n,m,x,t ...
- AE视频制作 参考 资源 科幻科技风格 开场 公司企业宣传
== 人类已经堕落,机器军团大举入侵,开始抹除人类,净化地球!-原创-高清正版视频在线观看–爱奇艺 这个视频片头不错.展示效果和音乐. == 外星人入侵地球,只为收集人类大脑!速看科幻电影<天际 ...
- [ZJOI2016]大森林
Description: 小Y家里有一个大森林,里面有n棵树,编号从1到n 0 l r 表示将第 l 棵树到第 r 棵树的生长节点下面长出一个子节点,子节点的标号为上一个 0 号操作叶子标号加 1(例 ...
- C#文件及数据流技术
空间名称:Sysytem.IO 一.文件.文件夹操作1.创建.删除.移动.复制文件 2.创建.删除.移动.复制文件夹 二.流操作 1.FileSream - 提供读取和写入文件的方式 文本文件的写入与 ...
- Java中Reflect的基本使用
首先在package reflect下定义了一个类Book package reflect; class Book{ private String title; private double pric ...
- 牛客网-C++
2017/8/18 程序运行结束时才释放:静态变量在内存的静态存储区,静态数据一直占有着该存储单元直到程序结束:一般局部变量在函数调用结束后释放变量占用的存储单元,而静态局部变量不释放. 静态全局变量 ...