Alex_McAvoy

想要成为渔夫的猎手

【概述】

数据包接收线程,是在已有的GUI上利用多线程技术进行数据接收,同时对GUI进行更新。因此,数据包接收线程,除了利用多线程进行数据接收外,还要在接收后对GUI控件进行更新

为此,需要提前编写一个更新数据包与更新列表的函数

阅读全文 »

【概述】

数据是从链路层到应用层一层一层装配起来的,因此,对于捕获到的数据包,需要一层一层的进行解析。同时,由于每一层可能有多种协议要工作,因此在解析数据包时,要根据不同的特征来判断上层协议。

在网络层,有 ARP、IPv4、IPv6 这三种情况,在链路层的 MAC 头结构中,定义了一个 type 字段,用于指示网络层的数据包的类型,根据协议栈的规定,有:

阅读全文 »

【基本结构】

与网络协议相关的数据结构存放在protocol.h头文件中,该头文件结构如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#ifndef PROTOCOL_H
#define PROTOCOL_H
#pragma once
#include "pcap.h"

#define PROTO_ARP 0x0806//ARP协议类型
#define PROTO_IP_V4 0x0800//IPv4协议类型
#define PROTO_IP_V6 0x86dd//IPv6协议类型

#define V4_PROTO_ICMP_V4 1//IPv4头结构下的ICMPv4协议类型
#define V4_PROTO_TCP 6//IPv4头结构下的TCP协议类型
#define V4_PROTO_UDP 17//IPv4头结构下的UDP协议类型

#define V6_PROTO_ICMP_V6 0x3a//IPv4头结构下的ICMPv6协议类型
#define V6_PROTO_TCP 0x06//IPv4头结构下的TCP协议类型
#define V6_PROTO_UDP 0x11//IPv4头结构下的UDP协议类型

#define LITTLE_ENDIAN 1234//小端
#define BIG_ENDIAN 4321//大端

1).MAC头定义
2).ARP头定义
3).IPv4头定义
4).IPv6头定义
5).ICMPv4头定义
6).ICMPv6头定义
7).UDP头定义
8).TCP头定义
9).包计数定义
10).数据包定义

#endif
阅读全文 »

【概述】

现代 OS 中,几乎所有的 I/O 设备都在于处理机交换数据时用了缓冲区

缓冲是一个存储区域,其由专门的硬件寄存器组成,但由于硬件的成本较高,一般仅用在速度要求非常高的场合

阅读全文 »

【初始化 WinPcap】

编写 Sniffer_initCap() 功能函数,通过调用 pcap_findalldevs() 函数获得网卡接口信息来初始化 WinPcap

1
2
3
4
5
6
7
8
9
// 1.初始化WinPcap
int CSnifferDlg::Sniffer_initCap(){
devCount = 0;
if (pcap_findalldevs(&alldev, errorBufffer) == -1)//获得网卡接口信息
return -1;
for (dev = alldev; dev; dev = dev->next)//记录设备数
devCount++;
return 0;
}
阅读全文 »

【设备独立性】

设备独立性,是指应用程序中所使用的设备不局限于使用某个具体的物理设备。

为了实现设备独立性,在设备驱动程序之上设置一层软件,称为与设备无关的 I/O 软件,或设备独立性软件

阅读全文 »

【GUI 设计】

下拉框

添加两个下拉框,一个用于选择网卡,一个用于选择过滤规则,同时在属性页将 Type 设为下拉列表(DropList)

阅读全文 »

【概述】

设备驱动程序是 I/O 系统的高层与设备控制器之间的通信程序,其主要任务是将上层软件发来的抽象 I/O 要求转化为具体要求,发送给设备控制器,启动设备去执行。同时,它也将由设备控制器发来的信号,传送给上层软件

为实现 I/O 系统高层与设备控制器间的通信,设备驱动程序应具有以下功能:

阅读全文 »