首先,这一次课设主要要做的事情:分析IP数据包!!!分析IP数据包!!!分析IP数据包!!!
IP数据包是一个大的概念,根据传输方式不同,有面向连接的TCP和面向无连接UDP。而基于这2种传输方式的IP数据包又用了不同的协议。
具体见TCP/IP协议族的层次结构
在做之前需要一些准备
1.准备VS中运行winpcap 的环境,百度一下网上有很多。关键词:winpcap+vs,神秘连接:点击打开链接
2.先了解这个结构体,IP首部,后面要做的事情需要围绕这个结构体展开。
struct IP_HEAD{
unsigned char ver_and_hlen;//版本号+首部长度共1个字节
unsigned char tos;//服务类型1个字节
unsigned short total_len;//总长度2个字节
unsigned short code;//标识2个字节
unsigned short flag;//标志+片偏移共2个字节
unsigned char ttl;//生存时间 1个字节
unsigned char protl;//上层协议标识1个字节
unsigned short check_sum;//首部校验和2个字节
unsigned char src_ip[4];//源IP地址4个字节
unsigned char des_ip[4];//目的IP地址4个字节
};
3.用vs写一个小程序,获取设备列表,并显示出来。测试自己的VS环境能不能正常使用winpcap编程。
4.鉴于我在网上看过很多博客写的真是对像我这样入门级别的人来说十分不友好,我决定把这个过程截图拿出来供大家参考。
5.用VS新建一个MFC的应用程序
6.选择基于对话框,之后完成。
7.画出一个界面,画之前先用delete键删除界面的全部控件,我的static控件变成这种样式是因为我设置了他的属性,如后面一张图
8.双击button按钮编写button的click事件,不过在编写之前需要添加头文件#include"pcap.h",这样就能使用wpcap里面的一些函数了。
9.下面开始正式写函数
CString Msg;void C课程设计Dlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
CString Msg;
pcap_if_t *alldevs;
pcap_if_t *d;
char errbuf[PCAP_ERRBUF_SIZE];
int i = 0;
//获取本地的设备列表
if (pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL /* auth is not needed */, &alldevs, errbuf) == -1)
{
Msg = "获取设备列表失败!";
SetDlgItemText(IDC_STATIC, Msg);
exit(-1);
}
/* Print the list */
for (d = alldevs; d != NULL; d = d->next)
{
Msg +=d->name;
Msg += "\r\n";
++i;
}
if (i == 0)
{
Msg = "\nNo interfaces found! Make sure WinPcap is installed.\n";
}
/* We don't need any more the device list. Free it */
pcap_freealldevs(alldevs);
SetDlgItemText(IDC_STATIC, Msg);
}
10.对于完全不了解上面代码的的可以看一下这个链接 点击打开链接
11.我的结果图
12.这个写的也不算很详细,有很多东西没有解释,如果看到这个博客的人对这个篇博客有什么想法或者建议,尽管提,以后多改正。后面更新。。。。