免费获取|
论文天下网
  • 论文天下网 |
  • 原创毕业论文 |
  • 论文范文 |
  • 论文下载 |
  • 计算机论文 |
  • 论文降重 |
  • 毕业论文 |
  • 外文翻译 |
  • 免费论文 |
  • 开题报告 |
  • 心得体会 |

当前位置:论文天下网 -> 免费论文 -> 计算机论文

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

位生存时间 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:数据 截获 技术 研究 实现 【返回顶部】

相关栏目

自动化相关
计算机论文
工程管理论文
法律论文
医学论文
人力资源
电子专业
电气工程
英语论文
行政管理
电子商务
社科文学
教育论文
物流专业
金融专业
财务管理
会计专业
化学化工材料科学
电子通信
环境科学
经济类
机械模具类
报告,总结,申请书
其他专业论文


关于我们 | 联系方式 | 论文说明 | 网站地图 | 免费获取 | 钻石会员 | 原创毕业论文

 

论文天下网提供论文检测,论文降重,论文范文,论文排版,网站永久域名WWW.GEPUW.NET

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

Copyright@ 2009-2022 GEPUW.NET 论文天下网 版权所有