用tcpdump和wireshark分析tcp连接过程

虽然很早就学习过TCP/IP协议,但是由于工作这两年都是在做算法方面的事情,没有实战过网络编程,对于TCP/IP仍然有些雾里看花的感觉。这两天复习了一下这方面的知识,算是给即将到来的新工作热热身。这篇文章就通过一个简单例子介绍如何使用tcpdump和wireshark分析tcp数据包。

 tcpdump介绍

tcpdump是一款unix系统下的命令行式网络数据包抓取工具,功能非常强大,是后台开发程序员和网络管理员的必备利器。其参数名目繁多,这里介绍几个最常用的吧

首先需要通过-i参数指定截取数据包的网卡,

tcpdump -i wlan0

一台机器上可能有几个网卡接口,-D参数能够显示所有网卡 ,另外也可以使用ifconfig和netstat -i,说明这个功能使用很普遍。

sTcpdump -D

1.eth0

2.wlan0

3.any (Pseudo-device that captures on all interfaces)

4.lo

lo表示回路网卡,是一个虚拟的接口,表示本机地址,下面测试时会用到。

tcpdump默认会做域名解析,将IP地址转换为域名,有时候希望只显示IP地址,可以禁止域名解析

tcpdump -n

tcpdump支持多种协议,可以指定协议筛选数据

tcpdump -p [TCP|UDP|TCMP|ARP]

指定抓取的数据包数量

tcpdump -c 10

在每个数据包前面输出抓包日期

tcpdump -tttt

指定抓包端口,源IP,目的IP,可以使用and,or等逻辑语句来筛选需要的信息。比如

tcpdump 'port 13' //只抓取端口13的数据包

tcpdump ‘dst 192.168.1.100’ //抓取IP地址 192.168.1.100的数据包

tcpdump ‘dst port 13 and dst 192.168.1.100' 抓取目标地址 192.168.1.100:13的数据包

制定抓取数据包的大小,0表示使用最大值65535.

tcpdump -s

可以把结果保存到文件中,方便wiresharp分析

tcpdump -w output.cap

也可以读取已保存的文件

tcpdump -r input.cap

二 使用tcpdump分析tcp数据包

下面通过运行一个简单的服务端客户端通信程序,分析tcp连接过程中的数据包交换,该程序来源于《UNIX网络编程V1》,可以从主页www.unpboook.com上下载。

先启动tcpdump,

sudo tcpdump -i lo -n -tttt 'port 13' -s 0

启动服务端程序:

sudo ./daytimetcpsrv1

启动客户端程序:

./daytimetcpcli 127.0.0.1

抓取到的数据包如下:

2014-11-28 17:19:18.717391 IP 127.0.0.1.51347 > 127.0.0.1.13: Flags [S], seq 4062918785, win 43690, options [mss 65495,sackOK,TS val 5585455 ecr 0,nop,wscale 7], length 0
2014-11-28 17:19:18.717419 IP 127.0.0.1.13 > 127.0.0.1.51347: Flags [S.], seq 202230076, ack 4062918786, win 43690, options [mss 65495,sackOK,TS val 5585455 ecr 5585455,nop,wscale 7], length 0
2014-11-28 17:19:18.717443 IP 127.0.0.1.51347 > 127.0.0.1.13: Flags [.], ack 1, win 342, options [nop,nop,TS val 5585455 ecr 5585455], length 0
2014-11-28 17:19:18.717602 IP 127.0.0.1.13 > 127.0.0.1.51347: Flags [P.], seq 1:27, ack 1, win 342, options [nop,nop,TS val 5585455 ecr 5585455], length 26
2014-11-28 17:19:18.717639 IP 127.0.0.1.13 > 127.0.0.1.51347: Flags [F.], seq 27, ack 1, win 342, options [nop,nop,TS val 5585455 ecr 5585455], length 0
2014-11-28 17:19:18.717639 IP 127.0.0.1.51347 > 127.0.0.1.13: Flags [.], ack 27, win 342, options [nop,nop,TS val 5585455 ecr 5585455], length 0
2014-11-28 17:19:18.717888 IP 127.0.0.1.51347 > 127.0.0.1.13: Flags [F.], seq 1, ack 28, win 342, options [nop,nop,TS val 5585455 ecr 5585455], length 0
2014-11-28 17:19:18.717916 IP 127.0.0.1.13 > 127.0.0.1.51347: Flags [.], ack 2, win 342, options [nop,nop,TS val 5585455 ecr 5585455], length 0
8 packets captured
16 packets received by filter

先介绍tcp报文中各个选项的作用,2014-11-28 17:19:18是报文发送时间,717391是数据包的ID,

127.0.0.1.51347 > 127.0.0.1.13,明显是源IP.源port> 目的IP.目的port,

Flags, tcp包的标志,s(SYN), F(FIN), P(PUSH),R(RST), “.”没有标志,

seq,数据报序列号, seq 1:27表示有26字节数据传输,采用前闭后开区间表示。

ack,应答号,告诉对端期望下一个报文的序列号

win, 本端可用缓冲大小,对端需根据此大小调整发送报文大小

URG, urgent标志,表示有紧急数据,例子中没有使用

options, tcp头部的选项信息, 其中mss表示tcp的最大可接受数据段大小,

下面一行行分析:

第一行从127.0.0.1.5:1347发送一个SYN报文到 127.0.0.1:13,序列号 4062918785,并告诉对端本端缓冲区大小是 43690字节,mss是 65495。

第二行从 127.0.0.1:13发送一个SYN包到127.0.0.1.5:1347,本报文序列号 202230076,应答号 4062918786=4062918785 +1,回应上一条接收到的报文。

第三行,127.0.0.1.5:1347发送了一个应答报文到127.0.0.1:13,ack=1表示期望对端发送的数据报序列号从1开始,并调整本端缓冲区大小为 342。

不难看出,上面3个报文就是TCP三次握手过程。至此,建立了一条从127.0.0.1.5:1347到 127.0.0.1:13的tcp连接。

第四行127.0.0.1:13发送了push报文,1:27表示数据大小为26字节,ack=1表示期望对端的下一个数据包序列号是1,即对端还没有发送数据包。PUSH标识表示需要尽快发送该数据包,这是由于TCP在内核中有自己的缓冲区,如果应用层的数据报比较小,会延迟等待多个数据报到达后缓冲区满了再一起发送,PUSH标识说明发送端需要尽快得到回应,当前报文必须马上发送,不必等缓冲区满。

第五行127.0.0.1:13发送一个FIN报文,seq=27,告诉对端要关闭本次连接,启动四次挥手过程。

第六行127.0.0.1.5:1347 发送回应报文,ack=27,此时处于half close状态。

第七行,127.0.0.1:51347发送FIN报文,ack=28, seq=1,

第八行,127.0.0.1:51347回应ack报文,进入time_waite状态。

8个数据包,3次握手建立连接,4次挥手关闭连接,只有一次是真正的数据传输。

三 使用wireshark分析tcp数据包

wireshark是非常流行的网络数据包分析软件,和tcpdump不同的是,wireshark是UI软件,可以直观详细地显示并分析数据包中各层协议信息。

为了分析上面的例子,先使用tcpdump -w把抓取信息保存下来,然后在wireshark中打开,如下图所示:

用tcpdump和wireshark分析tcp连接过程

可以看到wireshark主要有三个窗口,最上面显示了所有8个数据包的信息,包括源IP,目的IP,协议和长度等等,中间窗口显示了每个数据包的详细信息,其中各个项都对应了OSI模型中的一层,从上到下分别是物理层,链路层,网络层,传输层,带数据的还有应用层。

用tcpdump和wireshark分析tcp连接过程

从传输层信息中可以清楚地看出tcp数据包头部的各项值,与上面tcpdump分析的一样。

最下面的窗口是数据包的16进制格式,可以清楚的看到服务端传给客户端的当前时间字符串,正好26字节。

用tcpdump和wireshark分析tcp连接过程

 本文同步于http://www.justcoding.info/

(完)

更多相关文章
  •  tcpdump抓包分析TCP三次握手过程 一. tcpdump使用1.首先看下MAN手册TCPDUMP(8) NAMEtcpdump - dump traffic on a networkSYNOPSIStcpdump [ -AdDeflLnNOpqRStuUvxX ] [ -c count ][ ...
  • 楼主测试资源            296人浏览                    3人参与        LV8众所周知,tcpdump是linux/unix系统中最常用的网络抓包工具,针对特定网卡监视网络数据包的传递方向,并输出数据包的报文头信息,为网络环境中数据包分析工作强大的支持.而通过 ...
  • 连接过程是通过一系列状态表示的,这些状态有:LISTEN,SYN-SENT,SYN- RECEIVED,ESTABLISHED,FIN-WAIT-1,FIN-WAIT-2,CLOSE-WAIT,CLOSING,LAST-ACK, TIME-WAIT和 CLOSED.CLOSED表示没有连接,各个状态 ...
  • 原文地址:http://www.cnblogs.com/coser/archive/2010/12/05/1968812.html 一.实验目的 实验1_1: 使用Freebsd/Linux操作系统下的C编译器和网络程序的调试方法,掌握TCP连接建立和终止以及调整缓冲区大小的方法. 实验1_2: 使 ...
  • 使用Wireshark来检测一次HTTP连接过程
    Wireshark是一个类似tcpdump的嗅探软件,界面更人性化一些,今天我用它来检测一次HTTP连接过程.安装好之后,先配置一下,选择Capture->Options,先设定你要嗅探的网络接口,在我的机器上是:ADMtek AN983/AN985/ADM951X NDIS5 Driver ...
  • 用tcpdump分析tcp三次握手,四次挥手
    1.tcpdump 简介 tcpdump是一个对网络上的数据包进行截获的包分析工具,一般linux系统以命令的形式使用 2.tcp三次握手 建立一个tcp连接会发生下面三个过程: 1.服务器必须准备好接受外来的连接,一般是调用socket,bind,listen三个函数完成 2.客户端通过conne ...
  • 用wireshark抓包分析TCP三次握手、四次挥手以及TCP实现可靠传输的机制
    关于TCP三次握手和四次挥手大家都在<计算机网络>课程里学过,还记得当时高超老师耐心地讲解.大学里我遇到的最好的老师大概就是这位了,虽然他只给我讲过<java程序设计>和<计算机网络>,但每次课几乎都动手敲代码或者当场做实验.好了不扯了,下面进入正题.      ...
  • 转使用Wireshark来检测一次HTTP连接过程
    Wireshark是一个类似tcpdump的嗅探软件,界面更人性化一些,今天我用它来检测一次HTTP连接过程.安装好之后,先配置一下,选择Capture->Options,先设定你要嗅探的网络接口,然后在Capture Filter里输入tcp port http,说明只监听80端口的tcp请 ...
一周排行
  • view桌面虚拟化系列2-View搭建
      本系列一共三章,具体如下:[view桌面虚拟化系列]1-vSphere搭建[view桌 ...
  • GC.Collect如何影响垃圾回收
    根据垃圾回收的算法,对象在内存中是按代的方式存放的,通常情况下,当第0代沾满分配的空间的时 ...
  • http://www.ansible.com.cn/. 读书 今年读的技术书不多,只有几本.小说之类的倒读的不少,比如<三体>三部曲等科幻小说.东野圭吾的几本悬疑小说等.读这些书大都是利用等飞机和坐飞机时 ...
  • 一.安装:1.复制lib/wms-plugin-mediacache.jar到Wowza安装目录下的[install-dir]/lib中.2.复制conf/MediaCache.xml到wowza安装目录的[inst ...
  •      一些老家的亲戚朋友听说我在北京有自己的公司,常常推荐自己手头的大学生(孩子之类的)过来工作,尤其是一些计算机专业毕业的,在父母眼里这学历.这专业正适合,用谁也是用,为什么要用别人?  遇此情况,当然不能直接 ...
  • SCCM2012SP1系列十四部署Windows7系统-2
    5. 创建任务序列在"软件库"-"操作系统"中,右 ...
  • <爱情公寓2>海报邓家佳娄艺潇成姐妹淘 王传君被封"笑场王" 电视剧<爱情公寓>第二季正在上海拍摄.日前,该剧主演王传君爆料因为大家关系特别好,拍摄时都爱疯狂抢戏,导致自己 ...
  • <?php /* * 输出缓冲控制 * * flush — 刷新输出缓冲 ob_clean — 清空(擦掉)输出缓冲区 ob_end_clean — 清空(擦除)缓冲区并关闭输出缓冲 ob_end_flush ...
  • //SeqStack.h typedef struct stack { DATA data[SIZE+1];  //数据元素  int top;  //栈顶  }SeqStack; SeqStack *SeqStac ...
  • 在此前是学校安排的一个月体验时间,然后因为觉着大学是在是什么也没学,趁现在有激情,所以留下来继续强化一下自己.       今天算是对前一个月的小结,做了一个小项目.基本上就是把我们前面所学到的东西拼在一起使用了.先 ...