崔5220 2015-05-20 08:21 采纳率: 0%
浏览 1866

基于winpcap嗅探器的问题

在网上找到的实例中有关于初始化IP头信息的代码,看不太懂,求大神指教。
我自己要写关于OSPF部分的代码。代码如下

unsigned char *pos;
pos=(unsigned char *)buf;
m_nVersion=*pos/16;
m_nHeaderLength = *pos%16;

pos++;
m_nServiceType=*pos;
m_nPrecedence=(*pos & 16)*4+(*pos & 8)*2+(*pos & 4);
if(*pos & 16)
    m_bDelay = true;
else 
    m_bDelay = false;
if(*pos & 8)
    m_bThroughtPut = true;
else
    m_bThroughtPut = false;
if(*pos & 4)
    m_bReliability = true;
else
    m_bReliability = false;

pos++;
m_uTotalLength=(*pos)*256+(*(pos+1));

pos+=2;
m_nIdentification=(*pos)*256+(*(pos+1));

pos+=2;
if(*pos & 64)
    m_bDF=true;
else
    m_bDF=false;
if(*pos & 32)
    m_bMF=true;
else
    m_bMF=false;
m_nFragOffSet=(*pos%32)*256+(*(pos+1));

pos+=2;
m_nTTL = *pos;

pos++;
m_nProtocol = *pos;

pos++;
m_nCheckSum = (*pos)*256+(*(pos+1));

pos+=2;
m_lSrcIP = (*pos)*0x1000000+(*(pos+1))*0x10000+(*(pos+2))*0x100+(*(pos+3));

pos+=4;
m_lDestIP = (*pos)*0x1000000+(*(pos+1))*0x10000+(*(pos+2))*0x100+(*(pos+3));


if(m_nHeaderLength > 5)
{
    pos += 4;
    m_nOptLength=(m_nHeaderLength-5)*4;
    m_pOptions=new unsigned char[m_nOptLength];
    memcpy(m_pOptions,buf+20,m_nOptLength);
}
else
{
    m_nOptLength = 0;
    m_pOptions = NULL;
}

pos=(unsigned char *)(buf+m_nHeaderLength*4);
m_nDataLength = m_uTotalLength-m_nHeaderLength*4;
if(m_nDataLength > 0)
{
    m_pData=new unsigned char[m_nDataLength];
    memcpy(m_pData,buf+m_nHeaderLength*4,m_nDataLength);
}
else
    m_pData = NULL;
  • 写回答

2条回答 默认 最新

  • oyljerry 2015-05-20 08:59
    关注

    你需要先看协议的数据格式定义,你就知道各个字段的大小,数据类型等,对着就可以看明白代码中的各种偏移处理。

    评论

报告相同问题?

悬赏问题

  • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码
  • ¥15 C#调用python代码(python带有库)
  • ¥15 矩阵加法的规则是两个矩阵中对应位置的数的绝对值进行加和
  • ¥15 活动选择题。最多可以参加几个项目?
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题
  • ¥20 云服务Linux系统TCP-MSS值修改?
  • ¥20 关于#单片机#的问题:项目:使用模拟iic与ov2640通讯环境:F407问题:读取的ID号总是0xff,自己调了调发现在读从机数据时,SDA线上并未有信号变化(语言-c语言)
  • ¥20 怎么在stm32门禁成品上增加查询记录功能
  • ¥15 Source insight编写代码后使用CCS5.2版本import之后,代码跳到注释行里面