• 大小: 2KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-10
  • 语言: 其他
  • 标签: crc-8校验  

资源简介

解析已封装好的 模拟IEEE 802.3格式的Ethernet帧的封包文件(封包文件是二进制文件,文件名为input,文件中包含若干个Ethernet帧,其中有正确的帧,也有错误的帧),列出每个Ethernet帧的各个字段的值,并判断帧的正确性

资源截图

代码片段和文件信息

#include 
#include 
#include 

using namespace std;

struct frame
{
    unsigned char qdm[7];   
    unsigned char djf;      
    unsigned char mddz[6];  
    unsigned char ydz[6];   
    unsigned char cd[2];    
    unsigned char data[1500];
    unsigned char jym;     
   };
 
unsigned cdz[10];  
frame fra[10];

int read_file()
{

    ifstream infile(“input“ios::binary);
for(int j=0;j<10;j++)
{
infile.read((char*)fra[j].qdm7);
        infile.read((char*)&fra[j].djf1);
    infile.read((char*)&fra[j].mddz6);
    infile.read((char*)&fra[j].ydz6);
    infile.read((char*)&fra[j].cd2);
    
    cdz[j]=fra[j].cd[1]+fra[j].cd[0]*256;
        


if(cdz[j]<46) cdz[j]=46;
    else if(cdz[j]>1500)
{
cout<<“数据溢出“<         system(“pause“);
        exit(1);
}

infile.read((char*)&fra[j].datacdz[j]);
    infile.read((char*)&fra[j].jym1);

if(infile.eof()) break;
}

return(j);
         
}



unsigned crc(int j)
{unsigned char file[2000];
 unsigned length;

 
for(int i=0;i<6;i++)
file[i]=fra[j].mddz[i];
for(i=0;i<6;i++)
file[i+6]=fra[j].ydz[i];
for(i=0;i<2;i++)
file[i+12]=fra[j].cd[i];
for(i=0;ifile[i+14]=fra[j].data[i];
length=cdz[j]+14;
unsigned  crc=0;
  unsigned  g=0x07; 
  for (int m=0; m  {
    
    crc ^= file[m];
    
    for(int n=0;n<8;n++)
    {
        if(crc & 0x80 )
            crc=(crc<<1)^g;
        else
            crc=crc<<1;
    }

    }
    crc&=0xff;
  
return crc;
}



void main()
{
int jn;
unsigned CRC; 
n=read_file();
    

for(j=0;j {
cout<<“序号:“<    
    int i;

    cout<<“前导码:“;
    for(i=0;i<7;i++)
    cout<        cout<
    cout<<“帧前定界符:“<    
    cout<<“目的地址:“;
    for(i=0;i<6;i++)
{cout<       if(i<5) cout<<“-“;}
    cout<    
    cout<<“源地址:“;
    for(i=0;i<6;i++)
{cout<     if(i<5) cout<<“-“;}
     cout<    
    cout<<“数据长度:“;
    for(i=0;i<2;i++)
{cout<     if(i<5) cout<<“ “;}
    cout<
        cout<<“数据字段:“<        CRC=crc(j);
if(CRC==fra[j].jym)
{
cout<<“CRC校验(正确):“<     cout<<“状态:“<<“Accept“< }
else
{
cout<<“CRC校验(错误):“< cout<<“状态:“<<“Discard“< }

cout< }

system(“pause“);
}







 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       2303  2006-10-06 13:46  frameparser\input

     文件       2755  2009-05-17 10:23  frameparser\frameparser.cpp

     目录          0  2009-05-17 10:18  frameparser

----------- ---------  ---------- -----  ----

                 5058                    3


评论

共有 条评论

相关资源