• 大小: 3.66MB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2023-10-31
  • 语言: C/C++
  • 标签: 帧结构  32位校验  

资源简介

Ethernet 帧结构解析程序,用C++的

资源截图

代码片段和文件信息


/*I declare that the assignment here submitted is original except for source material explicitly acknowledged. 
I also acknowledge that I am aware of University policy and regulations on honesty in academic work and of the disciplinary guidelines and procedures applicable to breaches of such policy and regulations. 
This asignment was finished under the help of jianghongmin .


黄晨晨                2012年9月23日
Signature Date

黄晨晨           123520081202005
Name Student ID

CS400____ Advanced Windows Network Programming
Course code Course title
*/








#include 
#include 
#include 
using namespace std;
/*ulPolynomial = 0x04c11db7*/
unsigned long crc32_table[256]; 
//字节bit交换(0 -7)(1-6)...
unsigned long Reflect(unsigned long ref char ch);
// 创建查表数组
void Init_CRC32_Table();

unsigned long GetCRC32( char *szData unsigned long dwSize);


void main(int argc char* argv[])
{
// 检测命令行参数的正确性
if (argc != 2)
{
cout << “请以帧封装包文件为参数重新执行程序“ << endl;
exit(0);
}
// 检测输入文件是否存在,并可以按所需的权限和方式打开
ifstream file;

//file.open(“E:\\testframe“ios::in|ios::binary|ios::_Nocreate);
file.open(argv[1] ios::in|ios::binary|ios::_Nocreate);
if (!file.is_open())
{
cout << “无法打开帧封装包文件,请检查文件是否存在并且未损坏“ << endl;
exit(0);
}

Init_CRC32_Table();


// 变量声明及初始化
int nSN = 1; // 帧序号
int nCheck = 0; // 校验码
int nCurrDataOffset = 22; // 帧头偏移量
int nCurrDataLength = 0; // 数据字段长度
bool bParseCont = true; // 是否继续对输入文件进行解析
int nFileEnd = 0; // 输入文件的长度


// 计算输入文件的长度
file.seekg(0 ios::end); // 把文件指针移到文件的末尾
nFileEnd = file.tellg(); // 取得输入文件的长度
file.seekg(0 ios::beg); // 文件指针位置初始化

cout.fill(‘0‘); // 显示初始化
cout.setf(ios::uppercase); // 以大写字母输出




// 定位到输入文件中的第一个有效帧
// 从文件头开始,找到第一个连续的“AA-AA-AA-AA-AA-AA-AA-AB”
while ( true )
{
for (int j = 0; j < 7; j++) // 找7个连续的0xaa
{
if (file.tellg() >= nFileEnd) // 安全性检测
{
cout<<“没有找到合法的帧“< file.close();
exit(0);
}
// 看当前字符是不是0xaa,如果不是,则重新寻找7个连续的0xaa
if (file.get() != 0xaa)
{
j = -1;
}
}

if (file.tellg() >= nFileEnd) // 安全性检测
{
cout<<“没有找到合法的帧“< file.close();
exit(0);
}

if (file.get() == 0xab) // 判断7个连续的0xaa之后是否为0xab
{
break;
}
}


file.seekg(-8ios::cur);


// 主控循环

while ( bParseCont ) // 当仍然可以继续解析输入文件时继续解析
{
// 将数据字段偏移量定位在上述二进制串之后14字节处,并准备进入解析阶段
nCurrDataOffset = (int)file.tellg() + 22;


// 检测剩余文件是否可能包含完整帧头
if ((int)file.tellg() + 14 > nFileEnd)//从目的地址到类型字段共14B
{
cout< file.close();
exit(0);
}

    int c; // 读入字节
int i = 0; // 循环控制变量
int EtherType = 0; // 由帧中读出的类型字段
bool bAccept = true; // 是否接受该帧


// 输出帧的序号
cout << endl << “frame#:\t\t“ << nSN;

// 输出前导码,只输出,不校验
cout << endl << “Preamble:\t“;
for (i = 0; i 

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

     文件       2282  2012-09-23 16:48  huangcc\huangcc\Debug\cl.command.1.tlog

     文件      16880  2012-09-23 16:48  huangcc\huangcc\Debug\CL.read.1.tlog

     文件       1496  2012-09-23 16:48  huangcc\huangcc\Debug\CL.write.1.tlog

     文件       3310  2012-09-23 14:20  huangcc\huangcc\Debug\huangcc.Build.CppClean.log

     文件        406  2012-09-23 14:23  huangcc\huangcc\Debug\huangcc.exe.embed.manifest

     文件        472  2012-09-23 16:48  huangcc\huangcc\Debug\huangcc.exe.embed.manifest.res

     文件        381  2012-09-23 16:48  huangcc\huangcc\Debug\huangcc.exe.intermediate.manifest

     文件        114  2012-09-23 16:48  huangcc\huangcc\Debug\huangcc.lastbuildstate

     文件       2854  2012-09-23 16:48  huangcc\huangcc\Debug\huangcc.log

     文件        204  2012-09-23 14:20  huangcc\huangcc\Debug\huangcc_manifest.rc

     文件          2  2012-09-23 16:48  huangcc\huangcc\Debug\link-cvtres.read.1.tlog

     文件          2  2012-09-23 16:48  huangcc\huangcc\Debug\link-cvtres.write.1.tlog

     文件          2  2012-09-23 16:48  huangcc\huangcc\Debug\link.6936-cvtres.read.1.tlog

     文件          2  2012-09-23 16:48  huangcc\huangcc\Debug\link.6936-cvtres.write.1.tlog

     文件          2  2012-09-23 16:48  huangcc\huangcc\Debug\link.6936.read.1.tlog

     文件          2  2012-09-23 16:48  huangcc\huangcc\Debug\link.6936.write.1.tlog

     文件          2  2012-09-23 16:48  huangcc\huangcc\Debug\link.7828-cvtres.read.1.tlog

     文件          2  2012-09-23 16:48  huangcc\huangcc\Debug\link.7828-cvtres.write.1.tlog

     文件          2  2012-09-23 16:48  huangcc\huangcc\Debug\link.7828.read.1.tlog

     文件          2  2012-09-23 16:48  huangcc\huangcc\Debug\link.7828.write.1.tlog

     文件       3562  2012-09-23 16:48  huangcc\huangcc\Debug\link.command.1.tlog

     文件       6218  2012-09-23 16:48  huangcc\huangcc\Debug\link.read.1.tlog

     文件       2226  2012-09-23 16:48  huangcc\huangcc\Debug\link.write.1.tlog

     文件        886  2012-09-23 16:48  huangcc\huangcc\Debug\mt.command.1.tlog

     文件        874  2012-09-23 16:48  huangcc\huangcc\Debug\mt.read.1.tlog

     文件        390  2012-09-23 16:48  huangcc\huangcc\Debug\mt.write.1.tlog

     文件     207983  2012-09-23 16:48  huangcc\huangcc\Debug\parser.obj

     文件     207767  2012-09-23 14:44  huangcc\huangcc\Debug\praser.obj

     文件       1294  2012-09-23 16:48  huangcc\huangcc\Debug\rc.command.1.tlog

     文件        818  2012-09-23 16:48  huangcc\huangcc\Debug\rc.read.1.tlog

............此处省略19个文件信息

评论

共有 条评论