sniffer设计与实现 下载本文

内容发布更新时间 : 2024/6/18 21:16:05星期一 下面是文章的全部内容请认真阅读。

信息安全专业 程序实践四

网络安全与网络管理

实践报告

软件学院

实验成绩表

2010年版

1. 实践目的

(1) 掌握sniffer程序原理; (2) 学习Wincap编程

(3) 能够使用Wincap实现数据包的捕获 (4) 设计和实现一个sniffer程序

(5) 掌握ARP欺骗原理,并能够实施ARP欺骗

2. 实践内容

(1)使用Winpcap实现数据包的捕获:;

(2)分析数据包:处理捕获的数据包,解析出其协议类型、源MAC地址、目的MAC地址、源IP地址、目的IP地址、源端口、目的端口和数据部分,然后将这些信息保存在文件中。最终根据文件内容统计以下协议的数据流量:网络层:IP,ICMP;传输层:TCP,UDP。 (3)将捕获的信息存放在数据库中,根据捕获的信息进行流量统计;

(4)ARP欺骗:截获网络上的数据包,对其进行分析,获取源和目的地址,用该数据包的目的IP地址来伪装自己的IP地址,并按照ARP报文格式,对该数据包的发送者发送ARP欺骗包,并验收ARP欺骗成功。

(5)界面化:利用MFC构建图形界面,便于用户操作。

3. 实践过程

1. Sniffer网络嗅探器

使用MFC构建图形界面,工程基于对话框模式建立。工程共有两个对话框,分别

为主对话框IDD_WINCAPA_DLG,其类名为CWincapaDlg,以及新建的对话框IDD_DIALOG,其类名为CAdapaterSelDlg,其作用是在进入主对话框之前选择网卡设备。

类CAdapaterSelDlg:

如截图显示,对话框内使用了Combo Box控件,并在ClassWizard里定义了CComboBox的变量m_selAdapter,在类CAdapaterSelDlg中定义了一个public的变量int m_selIndex。在ClassWizard中添加三个成员函数:

virtual void OnOK();//把选中的设备的序号赋值到m_selIndex中 virtual BOOL OnInitDialog();//初始化对话框,把已经查找出来的网络设备显示在下

拉列表中

virtual void OnCancel();//弹出对话框,并退出程序

获取本地网卡列表所使用的函数以及代码在实验指导书中都有,这里就不过多介绍了。 主对话框:

主对话框中使用了check box控件,list control控件,以及五个button控件。

在ClassWizard里定义变量:list control控件变量CListCtrl m_list,BOOL型的check box变量m_arpFilter; m_icmpFilter; m_ipFilter; m_tcpFilter; m_udpFilter。

在WincapaDlg.cpp中定义结构体:

struct ETHDR{//以太网头部

u_char eh_dst[6]; u_char eh_src[6];

u_short eh_type;//IP?ARP? };

typedef struct ip_header{/* IPv4 header */

u_char ver_ihl; // Version (4 bits) + Internet header length (4 bits) u_char tos; // Type of service

u_short tlen; // Total length u_short identification; // Identification

u_short flags_fo; // Flags (3 bits) + Fragment offset (13 bits) u_char ttl; // Time to live

u_char proto; // Protocol

u_short crc; // Header checksum u_int saddr; // Source address u_int daddr; // Destination address u_int op_pad; // Option + Padding }ip_header;

struct TCPPacketHead {/* TCP header*/

2