转 Wireshark和TcpDump抓包分析心得
1. Wireshark与tcpdump介绍
Wireshark是一个网络协议检测工具,支持Windows平台和Unix平台,我一般只在Windows平台下使用Wireshark,如果是Linux的话,我直接用tcpdump了,因为我工作环境中的Linux一般只有字符界面,且一般而言Linux都自带的tcpdump,或者用tcpdump抓包以后用Wireshark打开分析。
在Windows平台下,Wireshark通过WinPcap进行抓包,封装的很好,使用起来很方便,可以很容易的制定抓包过滤器或者显示过滤器,具体在下面介绍。Wireshark是一个免费的工具,只要google一下就能很容易找到下载的地方。
tcpdump是基于Unix系统的命令行式的数据包嗅探工具。如果要使用tcpdump抓取其他主机MAC地址的数据包,必须开启网卡混杂模式,所谓混杂模式,用最简单的语言就是让网卡抓取任何经过它的数据包,不管这个数据包是不是发给它或者是它发出的,点击【http://en.wikipedia.org/wiki/Promiscuous_mode】获取更多有关混杂模式的资料。一般而言,Unix不会让普通用户设置混杂模式,因为这样可以看到别人的信息,比如telnet的用户名和密码,这样会引起一些安全上的问题,所以只有root用户可以开启混杂模式,开启混杂模式的命令是:ifconfig eth0 promisc, eth0是你要打开混杂模式的网卡。肯定有人要问如果在windows下要不要打开混杂模式,windows下网卡没有什么混杂模式不混杂模式,在于应用程序本身,如使用Wireshark抓包的时候可以通过设置为在混杂模式下抓包(这就是为什么该死的ARP欺骗病毒可以猖狂的原因)。tcpdump当然也可以指定抓包过滤器,而且其过滤器语言非常著名,叫做Berkeley包过滤,简称BPF语言。
2. 简单的例子
我们通过访问www.google.com.hk这个网址来看看抓包结果。
2.1 tcpdump
前面说过一般情况下Linux都自带了tcpdump,但是如果发生了小概率事件,发现没有tcpdump的话,可以到http://www.tcpdump.org下载源代码,编译安装。
使用root用户登录,运行tcpdump命令就可以开始抓包。这里说明一下,如果使用SSH登录到远程Linux,然后直接运行tcpdump,会发现抓到大量的数据包,速度快的都看不清楚,这是因为tcpdump抓到的包发送给远程的终端显示,同时又抓了这个包,再显示,再抓取,造成了循环抓取。当然,这样抓包没有任何意义,除了证明你的网络是通的。
因为没有打开网卡的混杂模式,所以如果本机没有任何进程访问网络,是抓不到包的,如果在字符界面下,用wget http://www.google.com.hk 访问网址,如果有GUI,可以打开firefox浏览器访问http://www.google.com.hk。
默认情况下,tcpdump会选择第一块网卡,也就是eth0,进行抓包,每行显示一个抓取的数据包,如:
0.003183 192.168.21.137 72.14.203.147 TCP 38039 > http [SYN] Seq=0 Win=5840 Len=0 MSS=1460 SACK_PERM=1 TSV=36941509 TSER=0 WS=6
0.011707 72.14.203.147 192.168.21.137 TCP http > 38039 [SYN, ACK] Seq=0 Ack=1 Win=64240 Len=0 MSS=1460
0.011770 192.168.21.137 72.14.203.147 TCP 38039 > http [ACK] Seq=1 Ack=1 Win=5840 Len=0
以上三个数据包就是著名的TCP三次握手的数据包,其中38039是客户端的TCP端口,http的默认端口是80,如果tcpdump在/etc/services中发现端口对应的服务名称,那么会自动的转为名字,所以这里会显示为http。表示客户端的38039端口和服务器端的http端口进行TCP三次握手。
前面提到tcpdump默认选择第一块网卡进行抓包,我们可以使用-i参数指定通过哪一个网卡抓包,如(#表示我输入的命令,Linux下root用户的提示符就是#):
# tcpdump –i eth1
或者
#tcpdump –i any
如果想知道我们可以通过哪几个网卡抓包,可以使用-D参数,如:
# tcpdump –D
1.eth0
2.any
3.lo
因为我的机器上只有一个网卡,因此只有eth0,如果有多块网卡活动的话,会有eth1,eth2依次下去。any的意思是通过任意一块网卡进行抓包,lo是回环接口。(关于TCP三次握手和回环接口等网络问题,请参考《TCP/IP协议详解》)。
默认情况下,tcpdump抓包结果显示在屏幕(严格点,专业点应该说是标准输出)上,显然这不利于进一步的数据分析,因此我们需要将抓包结果存放在文件中。可是使用-w命令将结果保存在文件中,如:
#tcpdump –w google.cap
这句命令将抓包结果存放在google.cap文件中,结束以后可以用Wireshark打开查看。同事,tcpdump出了抓包,还可以使用-r参数制定抓包数据文件,结合过滤器对抓包数据分析,如:
#tcpdump –r google.cap http
这句命令的意思是让tcpdump读取google.cap文件,把其中http协议的数据包都给过滤出来。关于过滤器在下面详细介绍。
2.2 Wireshark
我在windows系统中使用Wireshark的,首先熟悉一下界面,图1是使用Wireshark打开google.cap文件的界面,
图1 Wireshark界面
图1中标注出三快区域,R1区域用来显示简单的数据包信息,我们用tcpdump抓包的时候,默认情况下也是显示成这样的;R2区域用来显示选中的数据包的详细信息,细心一点会发现他是按照TCP/IP四层结构显示的,第一行是数据链路层的信息,第二行是网络层信息(IP协议),第三行是传输层信息(TCP协议),第四行是应用层信息(HTTP协议),可以展开每一行用来观察具体的内容;R3区域是用来显示此数据包的真实面目。我们在R1和R2区域看到的信息都是Wireshark整理以后给我们看的,抓包的真实数据实际上是一堆二进制序列,用ultraedit打开google.cap文件可以看到就是一些数字,如图2所示。
图2 抓包文件长的样子
使用Wireshark抓包非常容易,直接点击按钮(工具栏第三个按钮)(工具栏第一个按钮)就开始抓包了,会发现只要一点击这个按钮,立刻就显示抓到包了,这是因为Wireshark默认在混杂模式下抓包,只要经过网卡的数据包都抓取下来(当然这台机器要连在网络中,如果没有数据流过当然没有包可抓),点击按钮停止此次抓包。
如果机器上安装了多块网卡,Wireshark默认选择第一张网卡抓包,如果等抓包完成了,这是发现选错了网卡是一件极度郁闷的事情。点击按钮可以在抓包之前选择抓哪张网卡。
图3 选择网卡
我机器上只有一张网卡,另外两个是安装Vmware时的虚拟网卡,可以看到虽然Packets上面已经有数据了,实际上需要点击Start才开始抓包。
解决了选择网卡的问题以后,考虑如果过滤抓包内容,点击菜单栏上的” Capture” > “Options”可以看到制定抓包规则的界面,如图4所示。
图4 制定抓包规则
图4可以看到Caputre packets in promiscuous mode,默认是选中的,表示Wireshark默认在混杂模式下抓包。同样可以选择通过哪张网卡抓包,不过这些都不是重点,最重要的是Caupture Fileter这里,点击该按钮,可以看到弹出一些预定义好的过滤器。比如选择“HTTP TCP port(80)”,下面Filter string: tcp port http就是过滤器的表示。表示抓tcp协议的,端口为80的数据包(http协议的默认端口是80)。
3. 过滤器(BPF语言)的使用
主要介绍一下在tcpdump中的过滤器使用,因为懂了这个就可以得心应手的使用wireshark了。
从最简单的开始,BPF语言主要有一个标志或者数字和限定词组成,限定词有三种:
第一种:指定类型
host, 定义抓取哪个IP地址(也可以给它mac地址,格式是00:00:00:00:00:00)的数据包,比如我想抓有关192.168.0.148这个IP地址的数据包,那么就写成tcpdump host 192.168.0.148, host是限定词,192.168.0.148就是标志。这条命令会抓取从发出或者向192.168.0.148发送的数据包。
net, 定义抓取某个网络的数据包,给出网络号就行了,它根据给的网络号字节数是1,2,3来判断A类地址,B类地址或者C类地址,比如tcpdump net 10.1.1 ,它就认为这是一个C类地址。
port,指定端口,比如tcpdump host and port 22, 这是抓端口为22的数据包,不管是TCP还是UDP的,这里我稍微早一点的给出了逻辑操作,and J,如果只想抓TCP的,那么可以写tcpdump host 192.168.0.148 and tcp port 22。
portrange,顾名思义,这个是指定端口范围的,用连字符”-”指定范围,比如tcpdump port 1025-8080
第二种:指定方向
我们之前的命令都是说“这条命令会抓取从192.168.0.148发出或者向192.168.0.148发送”,所以,如果指向抓从发出的数据包可以使用限定词src, 命令:tcpdump src host 192.168.0.148,反过来,想抓发向192.168.0.148的数据包,使用限定词dst,命令:tcpdump dst host 192.168.0.148。
第三种:指定协议
我们知道网络协议有N种。。。我列一下常用的几种,其他的可以去google一下J
ether和fddi, 以太网协议
tr, TR协议
ip, IP协议
ip6, IPv6协议
arp, ARP协议
好了,最后还需要注意的是逻辑运算,and, or, not(与,或,非),上面已经有一个例子了, 这里就不再罗嗦了,和普通的编程语言没有什么不同。
除此之外,还有更加牛X的功能,比如指定TCP中的某个标识位是什么,这种应用我一般很少用,不再罗嗦了。
http://blog.csdn.net/zrzlj/article/details/6076219
Sign Up & Read Comfortably—Anytime, Anywhere
A
subscription to Readability offers great features for mobile reading,
saving articles for later and supporting the writers you enjoy. Learn More »
转 Wireshark和TcpDump抓包分析心得的更多相关文章
- Wireshark和TcpDump抓包分析心得
Wireshark和 TcpDump抓包分析心得 1. Wireshark与tcpdump介绍 Wireshark是一个网络协议检测工具,支持Windows平台和Unix平台,我一般只在Window ...
- 转:tcpdump抓包分析(强烈推荐)
转自:https://mp.weixin.qq.com/s?__biz=MzAxODI5ODMwOA==&mid=2666539134&idx=1&sn=5166f0aac71 ...
- [转]Linux操作系统tcpdump抓包分析详解
PS:tcpdump是一个用于截取网络分组,并输出分组内容的工具,简单说就是数据包抓包工具.tcpdump凭借强大的功能和灵活的截取策略,使其成为Linux系统下用于网络分析和问题排查的首选工具. t ...
- linux下使用tcpdump抓包分析tcp的三次握手
首先贴上tcp 三次握手的原理图服务器开启ftp服务并执行tcpdump抓包服务器:192.168.3.14 ftp服务客户端:192.168.3.100 服务器执行以下命令,客户端访问服务器ftp: ...
- TCP三次握手与Tcpdump抓包分析过程
一.TCP连接建立(三次握手) 过程 客户端A,服务器B,初始序号seq,确认号ack 初始状态:B处于监听状态,A处于打开状态 A -> B : seq = x (A向B发送连接请求报文段,A ...
- 使用 tcpdump 抓包分析 TCP 三次握手、四次挥手与 TCP 状态转移
目录 文章目录 目录 前文列表 TCP 协议 图示三次握手与四次挥手 抓包结果 抓包分析 TCP 三次握手 数据传输 四次挥手 TCP 端口状态转移 状态转移 前文列表 <常用 tcpdump ...
- Nmap扫描与Tcpdump抓包分析
扫描与抓包分析 3.1 问题 本案例要求熟悉Linux主机环境下的常用安全工具,完成以下任务操作: 使用NMAP扫描来获取指定主机/网段的相关信息 使用EtterCAP截获明文通信的密码.检测非加密通 ...
- wireshark和tcpdump抓包TCP乱序和重传怎么办?PCAP TCP排序工具分享
点击上方↑↑↑蓝字[协议分析与还原]关注我们 " 介绍TCP排序方法,分享一个Windows版的TCP排序工具." 在分析协议的过程中,不可避免地需要抓包. 无论抓包条件如何优越, ...
- [Wireshark]_003_电子邮件抓包分析
电子邮件是我们的生活工作中经常使用的一种服务,用来联系世界各地的朋友,客户.下面我们就用Wireshark对电子邮件进行抓包. 准备工作: 邮件客户端一款(Outlook,Foxmail,KooMai ...
随机推荐
- Centos安装TFTP/NFS/PXE服务器网络引导安装系统
客户端网卡要求支持以PXE启动,配置都在服务端进行,通过PXE网络启动安装系统流程: 客户端以PXE启动发送DHCP请求: 服务器DHCP应答,包括客户端的IP地址,引导文件所在TFTP服务器: 客户 ...
- mysql中删除重复记录,并保留重复数据中的一条数据的SQL语句
正好想写一条删除重复语句并保留一条数据的SQL,网上查了一部分资料写的很详细,但还是在这里写下自己的理解,以遍后续学习 .如下: 表字段和数据: SQL语句: [sql] view plain cop ...
- SSM整合步骤
第一步:mybatis和spring整合 mybatis-spring-1.2.2:是mybatis官方出的包: mybatis的包: mybatis和spring的整合包: spring及sprin ...
- RT-thread内核之空闲线程
空闲线程是系统线程中一个比较特殊的线程,它具有最低的优先级,当系统中无其他线程可运行时,调度器将调度到空闲线程.空闲线程通常是一个死循环,永远不被挂起.RT-Thread实时操作系统为空闲线程提供了钩 ...
- 【bzoj4580】[Usaco2016 Open]248 区间dp
题目描述 Bessie likes downloading games to play on her cell phone, even though she does find the small t ...
- NOIP2018初赛 游记
这玩意写个鬼游记啊 听说普及+提高的考两张卷子€€£也是想得出来 怎么监考还能咕咕咕的啊 怎么我到快结束了才做完啊 怎么我根本不知道初赛能带啥啊 怎么dij我都能想着对的选了错的啊 怎么我根本不知道图 ...
- [洛谷P4847]银河英雄传说V2
题目大意:有$n(n\leqslant2\times10^5)$个序列,有$m(m\leqslant2\times10^5)$个操作,分三种: 1. $M\;x\;y:$把$x$所在的序列放在$y$所 ...
- 【以前的空间】poj 2288 Islands and Bridges
一个不错的题解 : http://blog.csdn.net/accry/article/details/6607703 这是一道状态压缩.每个点有一个值,我们最后要求一个最值sum.sum由三部分组 ...
- Apache 403 错误解决方法-让别人可以访问你的服务器(转)
有一次做好了一个效果放在自己电脑的服务器上,让同学查看(同处于校园网中),却不知apache一直显示403 错误,对方没有权限访问,我知道这应该是配置文件httpd.conf中的问题,网上搜了一下其他 ...
- TiXmlHandle的使用-简化tinyxml的代码
借鉴于:http://www.cppblog.com/elva/archive/2008/04/24/47907.html 例如: <?xml version="1.0" s ...