免费获取
|
论文天下网
|
原创毕业论文
|
论文范文
|
论文下载
|
计算机论文
|
论文降重
|
毕业论文
|
外文翻译
|
免费论文
|
开题报告
|
心得体会
|
全站搜索
当前位置:
论文天下网
->
免费论文
->
计算机论文
免费数据包截获技术的研究与实现(六)
位生存时间 TTL
unsigned char proto; //8位协议 (TCP, UDP 或其他)
unsigned short checksum; //16位IP首部校验和
unsigned int sourceIP; //32位源IP地址
unsigned int destIP; //32位目的IP地址
}IP_HEADER;
4.5程序设计实现重点
在此数据包截获程序设计中,重点在于设计一个截获、分析程序,用于研究是数据包的截获与分析技术的实现,这二点是此设计的重点。
就此设计的数据包截获程序来说,在截获到数据包之后,一层一层对数据包进行解析,最后分析出数据包里面包含的数据信息。现我们详细阐述截获数据包与分析数据包的情况。
4.5.1数据包的截获
在截获数据包前,首先对原始套接字进行设置,代码如下:
//初始化SOCKET
WSADATA wsaData;
iErrorCode = WSAStartup(MAKEWORD(2,1),&wsaData);
CheckSockError(iErrorCode, "WSAStartup");
SockRaw = socket(AF_INET , SOCK_RAW , IPPROTO_IP);//创建套接字
CheckSockError(SockRaw, "socket");
//获取本机IP地址
char FAR name[MAX_HOSTNAME_LAN];
iErrorCode = gethostname(name, MAX_HOSTNAME_LAN);
CheckSockError(iErrorCode, "gethostname");
struct hostent FAR * pHostent;
pHostent = (struct hostent * )malloc(sizeof(struct hostent));
pHostent = gethostbyname(name);
//填充SOCKADDR_IN结构的内容
SOCKADDR_IN sa;
sa.sin_family = AF_INET;// internet协议簇
sa.sin_port = htons(6000);// socket端口号(端口号可以随便改,但与系统不能冲突)
memcpy(&sa.sin_addr.S_un.S_addr, pHostent->h_addr_list[0], pHostent->h_length);
free(pHostent);
iErrorCode = bind(SockRaw, (PSOCKADDR)&sa, sizeof(sa));// 把原始套接字SockRaw绑定到本地网卡地址上//
CheckSockError(iErrorCode, "bind");
//设置SOCK_RAW为SIO_RCVALL(即把网卡设置为混杂模式),以便接收所有的IP包
DWORD dwBufferLen[10] ;
DWORD dwBufferInLen = 1 ;
DWORD dwBytesReturned = 0 ;
iErrorCode=WSAIoctl(SockRaw, SIO_RCVALL,&dwBufferInLen, sizeof(dwBufferInLen), &dwBufferLen, sizeof(dwBufferLen),&dwBytesReturned , NULL , NULL );//
CheckSockError(iErrorCode, "Ioctl");
前面的工作基本上都是对原始套接字进行设置,在将原始套接字设置完毕,使其能按预期目的工作时,就可以通过recv()函数从网卡接收数据包了,接收到的原始数据包存放在缓存区中,并将参数提交给DecodeIpPack函数进行解包,具体的实现代码如下:
{
memset(RecvBuf, 0, sizeof(RecvBuf));
iErrorCode = recv(SockRaw, RecvBuf, sizeof(RecvBuf), 0);
CheckSockError(iErrorCode, "recv");
iErrorCode = DecodeIpPack(RecvBuf, iErrorCode);
CheckSockError(iErrorCode, "Decode");
}
…
4.5.2数据包的解析
数据包被截获后然后就可以根据前面对IP数据段头、TCP数据段头的结构描述而对截获的数据包进行分析。这是数据包截获程序的一个重要的组成部分。
如图8所示:
图8数据包解析流程
图8所示为数据包的解析模块,该模块对截获的数据包进行拆包分析,根据不同的协议类型分析其IP地址,数据包大小,端口号等,具体代码实现如下:
int DecodeIpPack(char *buf, int iBufSize)
{
IP_HEADER *pIpheader;
SOCKADDR_IN saSource, saDest;
pIpheader = (IP_HEADER *)buf;
//协议甄别
iProtocol = pIpheader->proto;
strncpy(szProtocol, CheckProtocol(iProtocol), MAX_PROTO_TEXT_LEN);
if((iProtocol==IPPROTO_TCP) && (!ParamTcp)) return true;
if((iProtocol==IPPROTO_UDP) && (!ParamUdp)) return true;
if((iProtocol==IPPROTO_ICMP) && (!ParamIcmp)) return true;
//源地址
saSource.sin_addr.s_addr = pIpheader->sourceIP;
strncpy(szSourceIP, inet_ntoa(saSource.sin_addr), MAX_ADDR_LEN
首页
上一页
3
4
5
6
7
8
9
下一页
尾页
6
/9/9
相关论文
上一篇
:
免费手机吞吃蛇游戏的设计与开发
下一篇
:
免费网上战友录的设计与实现
推荐论文
本专业最新论文
Tags:
数据
截获
技术
研究
实现
【
返回顶部
】
相关栏目
自动化相关
计算机论文
工程管理论文
法律论文
医学论文
人力资源
电子专业
电气工程
英语论文
行政管理
电子商务
社科文学
教育论文
物流专业
金融专业
财务管理
会计专业
化学化工材料科学
电子通信
环境科学
经济类
机械模具类
报告,总结,申请书
其他专业论文