网站地图| 免费获取|
毕业论文网
  • 网站首页|
  • 论文范文|
  • 论文降重|
  • 职称论文发表|
  • 合作期刊|
  • 论文下载|
  • 计算机论文|
  • 外文翻译|
  • 免费论文|
  • 论文资料|
  • 论文开题报告
搜索

当前位置:毕业论文网 -> 免费论文 -> 计算机论文 -> 免费数据包截获技术的研究与实现(六)
计算机论文资料| ASP设计| Delphi| VB设计| JSP设计| ASP.NET设计| VB.NET| java设计| VC| pb| VS| dreamweaver| c#.net| vf| VC++| 计算机论文范文| 论文下载| 自动化论文

免费数据包截获技术的研究与实现(六)

最新活动:微信集50个赞就可获取任意一篇钻石会员文档。详情见微信集赞换文档
免费数据包截获技术的研究与实现(六) 位生存时间 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

免费数据包截获技术的研究与实现(六)由毕业论文网(www.huoyuandh.com)会员上传。
原创论文资料流程 相关论文
上一篇:免费手机吞吃蛇游戏的设计与开发 下一篇:免费网上战友录的设计与实现
推荐论文 本专业最新论文
Tags:数据 截获 技术 研究 实现 2010-04-01 10:52:35【返回顶部】
精彩推荐
发表论文

联系方式 | 论文说明 | 网站地图 | 免费获取 | 钻石会员 | 硕士论文资料


毕业论文网提供论文范文,论文代发,原创论文资料

本站部分文章来自网友投稿上传,如发现侵犯了您的版权,请联系指出,本站及时确认并删除  E-mail: 17304545@qq.com

Copyright@ 2009-2020 毕业论文网 版权所有