winpcap实现从TCP三次握手到发送http请求

您所在的位置:网站首页 网络中的三次握手 winpcap实现从TCP三次握手到发送http请求

winpcap实现从TCP三次握手到发送http请求

2024-07-06 03:11:07| 来源: 网络整理| 查看: 265

之前的文章我都是贴出了协议的格式,对具体字段没有具体说明,今天在这里补充一下。

/* IP报文格式 0 8 16 32 +------------+------------+-------------------------+ | ver + hlen | 服务类型 | 总长度 | +------------+------------+----+--------------------+ | 标识位 |flag| 分片偏移(13位) | +------------+------------+----+--------------------+ | 生存时间 | 高层协议号 | 首部校验和 | +------------+------------+-------------------------+ | 源 IP 地址 | +---------------------------------------------------+ | 目的 IP 地址 | +---------------------------------------------------+ */

版本号(Version)字段标明了IP 协议的版本号,目前的协议版本号为4,下一代IP 协议的版本号为6,占4位。

普通的 IP 头部长度为20 个字节,不包含IP 选项字段,注意:这里的头部长度是以4字节即32位为单位的,所以真正的IP报头长度应该是该值 * 4。占4位

位的服务类型(TOS,Type of Service)字段包括一个3 位的优先权字段(COS,Class of Service),4 位TOS 字段和1 位未用位。4 位TOS 分别代表最小时延、最大吞吐量、最高可靠性和最小费用。一般是置0的。

总长度(Total length)是整个IP 数据报长度,如果上层是TCP协议,则总长度 = IP报头长度 + TCP报头长度 + 数据长度。

标识符(Identification)字段唯一地标识主机发送的每一份数据报。通常每发送一份报文它的值就会加1,我试验的时候没有加一,服务器也能响应。

生存时间(TTL,Time to Live)字段设置了数据包可以经过的路由器数目。一旦经过一个路由器,TTL 值就会减1,当该字段值为0 时,数据包将被丢弃,所以你可以将该置设成最大0xFF。

高层协议号:IP是网络层协议,要为传输层服务,一般来说高层协议有TCP、UDP,还可以是ICMP,因为ICMP也是用IP包发送的。TCP 为6,UDP为17,ICMP为1。

首部校验和(Head checksum):IP 头部的校验和,如果有选项字段,那就要一起校验,在计算校验和时一定先要将其值为0。

最后两项是源主机ip地址和目标主机ip地址。

/* TCP 报文 0 16 32 +------------------------+-------------------------+ | 源端口地址 | 目的端口地址 | +------------------------+-------------------------+ | 序列号 | +--------------------------------------------------+ | 确认号 | +------+--------+--------+-------------------------+ |HLEN/4| 保留位 |控制位/6| 窗口尺寸 | +------+--------+--------+-------------------------+ | 校验和 | 应急指针 | +------------------------+-------------------------+ */ 源端口号:标识主机上发起传送的应用程序;

目的端口:标识主机上传送要到达的应用程序。

顺序号:用来标识从TCP源端向TCP目标端发送的数据字节流,它表示在这个报文段中的第一个数据字节。

确认号:只有ACK标志为1时,确认号字段才有效。它包含目标端所期望收到源端的下一个数据字节。

头部长度:TCP报头的长度,单位是4字节即32位,如果没有选项字段,则TCP报头为20字节,这个地方写20 / 4 = 5。这个字段也叫数据偏移量,表示数据开始的地方。

预留:由跟在数据偏移字段后的6位构成,预留位通常为0。

标志位:(U、A、P、R、S、F):占6位。从左到右依次是URG、ACK、PSH、RST、SYN、FIN。各位的含义如下:   URG:紧急指针(urgent pointer)有效。   ACK:确认序号有效。   PSH:接收方应该尽快将这个报文段交给应用层。   RST:重建连接。   SYN:发起一个连接。   FIN:释放一个连接。 窗口大小:占16比特。此字段用来进行流量控制。单位为字节数,这个值是本机期望一次接收的字节数。

TCP校验和:TCP报头校验和。注意,这个地方要校验的不仅仅是TCP报头数据,而是伪报头 + TCP报头 + TCP数据 这三个数据,很多人在这个地方少了。

紧急指针字段:占16比特。它是一个偏移量,和序号字段中的值相加表示紧急数据最后一个字节的序号。

TCP伪报头

struct PSDTCP_HEADER { byte srcIpAddr[4]; //Source IP address; 32 bits byte dstIpAddr[4]; //Destination IP address; 32 bits byte padding; //padding byte protocol; //Protocol; 8 bits byte tcpLen[2]; //TCP length; 16 bits } ; 上面说了,在计算TCP校验和时需要伪报头,主要是要用源 /目的主机的IP地址和运输层网络协议号。其实按照协议分层来说,TCP所在的传输层应该和IP地址所在的网络层是分开的,现在传输层要访问网络层报文中的IP地址,好像违反了规定。

最后就是以太网头了如下:

struct ETHERNET_HEADER { byte dstMacAddr[6]; byte srcMacAddr[6]; byte ethernetType[2]; }; 以太网头主要是源主机和目标主机的mac地址以及协议,比如IP或者ARP, 这个地方再强调一点,我们很容易获取源主机的mac地址,但对目标主机就不一定了,假如只是做试验,我们可能知道,但假如我们真的要给外网服务器发送,那就不行了,我们不可能知道百度服务器的mac地址,所以在给外网发送时,目标主机的mac地址应该写网关的mac地址,直接发给网关。网上很多帖子在这个地方说的都很模糊,有些甚至是直接全写0xFF。



【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭