資源簡介
解析已封裝好的 模擬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;i file[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??fr
?????文件???????2755??2009-05-17?10:23??fr
?????目錄??????????0??2009-05-17?10:18??fr
-----------?---------??----------?-----??----
?????????????????5058????????????????????3
- 上一篇:Clarke變換中系數(√)2/3的推導
- 下一篇:線路放樣坐標計算器
評論
共有 條評論