用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请 ...
一周排行
  • 2. 解决之道:: 2.1. 使用了cmd /k走死锁兰...改成个/c佐ok兰.. String cmd="cmd.exe /c dir  ";//cmd="dir"; 2. ...
  • 1.在服务器主机上安装JDK(java虚拟机)//根据安装向导,选择默认设置一步一步安装即可//此时JDK安装成功2.安装ACS服务器(注:选择默认设置一步一步安装即可)//此时ACS服务器安装成功//将ACS服务器 ...
  • <!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><t ...
  • [[email protected]]# vim /etc/my.cnf[mysqld]log_bin=dbsvr1-bin                      //启用binlog日志,并指定文件名前缀serv ...
  • http://www.cnblogs.com/liusuqi/category/447143.htmlPhoton--Receiver Groups 接收组Photon--Secure Websockets Setu ...
  • acl实现穿越ASA防火墙
    一,概述:ASA安全设备:Cisco ASA 系列5500系列自适应安全设备室最新的cis ...
  • 不管是在局域网还是互联网上,人们也都面临着另外一个困惑:计算机在网络上通讯时本来只能识别如"202.231.14.233"之类的数字地址,那么为什么当我们打开浏览器,在地址栏中输入如"w ...
  •  查看指定虚机vnc端口占用:# echo $(virsh vncdisplay vHOST)+5900|sed 's/^:/ /g'|bc5901 找出使用vnc连接此虚机的IP# ss | grep 5901 
  • 我本想把发送和接收分开作为两部分,但是最后我决定只略微解释一下 FD_READ ,留下更多的时间来说明更复杂的 FD_WRITE , FD_READ 事件非常容易掌握. 当有数据发送过来时, WinSock 会以 F ...
  • 在linux下Ant的环境配置
    Ant(英文全称为another neat tool,另一个简洁的工具)是一个基于Java ...