毕业论文论文范文课程设计实践报告法律论文英语论文教学论文医学论文农学论文艺术论文行政论文管理论文计算机安全
您现在的位置: 毕业论文 >> 课程设计 >> 正文

解析IP数据包课程设计 第2页

更新时间:2010-12-1:  来源:毕业论文
解析IP数据包课程设计 第2页
  Char buffer[BUFFER_SIZE]; //设置缓冲区

  While(true)

  {recv(sock,buffer,BUFFER_SIZE,0); //j接收数据包

  ……..

  3.定义IP头部的数据结构

  程序需要定义一个数据结构表示IP头部。这个数据结构应该和图7-1吻合,其代码如下:

  typedef struct _IP_HEADER //定义IP头

  {

  union

  {

  BYTE Version; //版本前4位

  BYTE HdrLen; //报头标长(后四位),IP头长度

  };

  BYTE ServiceType;//服务类型

  WORD TotalLen; //总长度

  WORD ID; //标识

  union

  { 毕业论文http://www.751com.cn

  WORD Flags; //标志

  Word FragOff; //分段偏移

  };

  BYTE TimeToLive; //生命期

  BYTE Protiocol; //协议

  WORD HdrChksum; //头校验和

  DWORD SrcAddr; //源地址

  DWORD DstAddr: //目的地址

  BYTE Options; //选项

  }IP_HEADER;

  这是我们只考虑IP头部结构,不考虑数据部分。在捕获IP数据包后,可以通过指针把缓冲区的内容强制转化为IP_HEADER数据结构。

  IP_HEADER ip = *( IP_HEADER *)buffer;

  4.IP包的解析

  解析IP包的字段有两种策略。针对长度为8位、16位和32位的字段 (或子字段)时,可以利用IP_HEADER的成员指教获取。要解析长度不是9位倍数的字段(或子字段)时,可以利用C语言中的位移以及与、或操作完成。下面给出了通过IP_HEADER解析IP头各个字段的代码。

  /*获取版本字段*/

  ip.Version>>4;

  /*获取头部长度字段*/

  ip.HdrLen & 0x0f;

  /*获取服务类型字段中的优先级子域*/

  ip.ServiceType>>5;

  /*获取服务类型字段中的TOS子域*/

  (IP.sERVICEtYPE>>1)&0X0F;

  /*获取总长度字段*/

  ip.TotalLEN;

  /*获取标识字段*/

  ip.ID;

  /*解析标识字段*/

  DF=(ip.Flags>>14) &0x01;

  MF=(ip.Flags>>13) &0X01;

  /*获取分段偏移字段*/

  ip.FragOff &0x1fff;

  /*获取生存时间字段*/

  ip.TimeToLive;

  /*获取协议字段*/

  ip.Protocol;

  /*获取头校验和字段*/

  ip.HdrChksum;

  /*解析源IP地址字段*/

  inet_ntoa(*(in_addr*)&ip.SrcAddr;

  /*解析目的的IP地址字段*/

  inet_ntoa(*(in_addr*)&ip.DstAddr);

上一页  [1] [2] 

解析IP数据包课程设计 第2页下载如图片无法显示或论文不完整,请联系qq752018766
设为首页 | 联系站长 | 友情链接 | 网站地图 |

copyright©751com.cn 辣文论文网 严禁转载
如果本毕业论文网损害了您的利益或者侵犯了您的权利,请及时联系,我们一定会及时改正。