qt和window抓包程序

1.思路

        使用原始套接字,将网卡设置为混杂模式,监听该网卡的数据。

2. 了解协议封包和协议层

qt和window抓包程序_第1张图片

    下图是tcp封包详细过程

qt和window抓包程序_第2张图片

数据包传输情况

在TCP/IP协议栈中的每一层为了能够正确解析出上层的数据包,从而使用一些“协议类型”来标记,详细如下图

qt和window抓包程序_第3张图片

1)链路层 以太帧结构(封包)

qt和window抓包程序_第4张图片

a. 前同步码:   

        用来使接收端的适配器在接收 MAC 帧时能够迅速调整时钟频率,使它和发送端的频率相同。前同步码为 7 个字节,1 和 0 交替。
b. 帧开始定界符 :   

        帧的起始符,为 1 个字节。前 6 位 1 和 0 交替,最后的两个连续的 1 表示告诉接收端适配器:“帧信息要来了,准备接收”。
c. 目的地址:

    接收帧的网络适配器的物理地址(MAC 地址),为 6 个字节(48 比特)。作用是当网卡接收到一个数据帧时,首先会检查该帧的目的地址,是否与当前适配器的物理地址相同,如果相同,就会进一步处理;如果不同,则直接丢弃。
d. 源地址:

    发送帧的网络适配器的物理地址(MAC 地址),为 6 个字节(48 比特)。
类型    上层协议的类型。由于上层协议众多,所以在处理数据的时候必须设置该字段,标识数据交付哪个协议处理。例如,字段为 0x0800 时,表示将数据交付给 IP 协议。
e. 数据:

    也称为效载荷,表示交付给上层的数据。以太网帧数据长度最小为 46 字节,最大为 1500 字节。如果不足 46 字节时,会填充到最小长度。最大值也叫最大传输单元(MTU)。在 Linux 中,使用 ifconfig 命令可以查看该值,通常为 1500。
f. 帧检验序列 FCS:

    检测该帧是否出现差错,占 4 个字节(32 比特)。发送方计算帧的循环冗余码校验(CRC)值,把这个值写到帧里。接收方计算机重新计算 CRC,与 FCS 字段的值进行比较。如果两个值不相同,则表示传输过程中发生了数据丢失或改变。这时,就需要重新传输这一帧。
 

2)  网络层 ip数据报结构

整体ip结构(包含udp,tcp)

qt和window抓包程序_第5张图片

qt和window抓包程序_第6张图片

3)传输层 tcp数据报结构

qt和window抓包程序_第7张图片

       udp结构

qt和window抓包程序_第8张图片

3.QT源码

.h

qt和window抓包程序_第9张图片

qt和window抓包程序_第10张图片

qt和window抓包程序_第11张图片

.cpp

qt和window抓包程序_第12张图片

qt和window抓包程序_第13张图片

qt和window抓包程序_第14张图片

qt和window抓包程序_第15张图片

你可能感兴趣的:(c++,网络,QT网络)