解析PCAP包理解TCP/IP
2015-09-18 09:09
477 查看
1.TCP/IP协议各层关系
ICMP是IP协议的附属协议。IP层用它来与其他的主机或者路由器交换错误的报文和其他重要信息。IGMP是Internet组管理协议,它用来把一个UDP数据包多播到多个主机。ARP和RARP是某些网络接口(如以太网和令牌环网)使用的特殊协议,他们用来转换网络接口的物理地址和对应的IP地址。
当目的主机接收到一个以太网数据帧时,数据就开始从协议栈的底部往上升,同时去掉各层封装的报文首部。每层协议盒都要去检查报文首部中的协议标识,确定接收数据的上层协议,这个过程就是分用。
2.IP数据包格式
IP首部长度一般为20字节,由于选项可变,首部实际长度通过4位首部长度进行确定。IP数据包的首部 长度必须为32的倍数,5*4Byte=20Byte。8位协议,6表示TCP,17表示UDP,1表示ICMP,2表示IGMP。3.TCP和UDP协议
3.1 TCP数据包格式
TCP是可靠连接协议,TCP连接三次握手过程为:
<
4000
span style="white-space:pre;">(1)请求端(客户)发送一个SYN报文段指明客户打算连接的服务器的端口,以及初始化序号ISN,这个SYN段称为报文1;(如:192.168.1.100用端口1300向服务器192.168.2.2的21端口发送一个连接请求,报文序号为0)
(2)服务器发回包含服务器的初始化序号的SYN报文段(报文段2)作为应答。同时将确认序号设置为客户的ISN加1以对客户的SYN报文段进行确认。一个SYN将占用一个序号;(如:服务器用21端口向客户端端口1300确认刚才的连接请求,这个报文段序号为0,确认序号为客户端发送的报文段序号+1)
(3)客户必须将确认序号设置为服务器的ISN加1以对服务器的SYN报文进行确认(报文段3)(如:客户端发送一个带序号的报文对刚才发送的报文进行确认,这次发送的报文序列号为1,确认序号为服务器发送的报文段序号+1)。
TCP终止连接的过程,简称四次挥手过程:
四次挥手的原因由于TCP的半关闭造成的。TCP连接是全双工的(即数据在两个方向上能同时传递),因此每个方向必须单独地进行关闭,这个原则就是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向连接。当一端收到一个FIN,它必须通知应用层另一端已经终止了那个方向的数据发送。
(1)首先进行关闭的一方(即发送第一FIN,一般是客户端)将执行主动关闭,而另一方(收到这个FIN)执行被动关闭。(如:客户端用端口1300对服务器端口21发送一个序号为192的FIN报文)(ACK,FIN)
(2)当接受方(服务器端)收到关闭方发送的FIN,TCP服务器向应用程序传送一个文件结束符,然后它发回一个ACK,确认序号为收到的序号加1,一个FIN占用一个序号;(如:服务器端口21对客户端端口1300发送一个序号为592的确认报文,它的ACK序号为193(192+1)(ACK)
(3)服务器程序关闭它的连接,它的TCP端发送另一个FIN(如:服务器端又发送一个序号为592的FIN报文,与上一个报文序号、ACK序号与上一个报文一样)(ACK,FIN)
(4)当客户端收到服务器端发送的FIN,客户就必须发回一个确认,并将确认序号设置为收到序号加1(如:客户端端口21发送一个序号为193的确认报文,它的ACK序号为593(592+1))
3.2 UDP报文格式
DNS解析:
域名解析:
查询名部分长度不定,一般为要查询的域名(也会有IP的时候,即反向查询)。此部分由一个或者多个标示符序列组成,每个标示符以首字节数的计数值来说明该标示符长度,每个名字以0结束。计数字节数必须是0~63之间。该字段无需填充字节。例如:03 77 77 77 06 67 6f 6f 67 6c 65 02 63 6e 00 表示www.google.cn
03的3表示后面有3个字符,00表示结尾
4.PCAP报文解析
4.1解析PCAP头1、时间戳,包括:
秒计时:32位,一个UNIX格式的精确到秒时间值,用来记录数据包抓获的时间,记录方式是记录从格林尼治时间的1970年1月1日 00:00:00 到抓包时经过的秒数;
微秒计时:32位, 抓取数据包时的微秒值。换成北京时间加上时区8
2、数据包长度:32位 ,标识所抓获的数据包保存在pcap文件中的实际长度,以字节为单位。
3、数据包实际长度: 所抓获的数据包的真实长度,如果文件中保存不是完整的数据包,那么这个值可能要比前面的数据包长度的值大。
PCAP头长度24B
4.2 packet包头
Timestamp:时间戳高位,精确到seconds
Timestamp:时间戳低位,精确到microseconds
Caplen:当前数据区的长度,即抓取到的数据帧长度,由此可以得到下一个数据帧的位置。
Len:离线数据长度:网络中实际数据帧的长度,一般不大于caplen,多数情况下和Caplen数值相等。
获取packet的时间TimeStamp,整个包的长度Caplen。
packet长度16B
4.3 以太网帧头
通过类型2B可以判断0x0800为IP,0x0806为ARP,0x8035为RARP
4.4 Host解析
当去掉packet头+以太网帧头+IP头+TCP头以后可以得到type,type可为GET,POST。报文例如:GET /loldytt/js/qdb.js HTTP/1.1
Host: img.cnsofas.com
Connection: keep-alive
Accept: */*
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.130 Safari/537.36
Referer: http://www.loldytt.com/
Accept-Encoding: gzip, deflate, sdch
Accept-Language: zh-CN,zh;q=0.8
If-Modified-Since: Mon, 07 Sep 2015 07:01:13 GMT
解析上述报文可得到Host。
相关文章推荐
- App Transport Security has blocked a cleartext HTTP (http://) resource ...
- Android --http请求之HttpURLConnection
- Hello Bonjour!实现零配置网络联网的解决方案
- 打造安全的App!iOS安全系列之 HTTPS 进阶
- Android Https相关完全解析 当OkHttp遇到Https
- 简单的-TCP服务端 - Linux socket编程入门(1)
- 网络笔记01-2 scoket
- 网络开始---多线程---GCD-01-基本使用(掌握)(六)
- 网络开始---多线程---线程间的通信(掌握)(五)
- 网络开始---多线程---线程的安全问题(了解)(四)
- 网络开始---多线程---NSThread-02-线程状态(了解)(三)
- 网络开始---多线程---NSThread-01-基本使用(了解)(二)
- 网络开始---多线程---阻塞主线程(演示)(一)
- tcp wrappers
- 网站为什么要使用https加密 https加密链接作用
- 承接游戏UI美术外包【厦门巨游网络科技有限公司】
- 解决VMware虚拟机搭建linux、win环境时遇到网络桥接无法使用、NAT网络正常访问的情况。
- 使用apache-httpserver2.2
- HttpClient 教程 (一)
- 【图论】最大密度子图&权闭合图