资源简介
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.em
文件 472 2012-09-23 16:48 huangcc\huangcc\Debug\huangcc.exe.em
文件 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\li
文件 2 2012-09-23 16:48 huangcc\huangcc\Debug\li
文件 2 2012-09-23 16:48 huangcc\huangcc\Debug\li
文件 2 2012-09-23 16:48 huangcc\huangcc\Debug\li
文件 2 2012-09-23 16:48 huangcc\huangcc\Debug\li
文件 2 2012-09-23 16:48 huangcc\huangcc\Debug\li
文件 2 2012-09-23 16:48 huangcc\huangcc\Debug\li
文件 2 2012-09-23 16:48 huangcc\huangcc\Debug\li
文件 2 2012-09-23 16:48 huangcc\huangcc\Debug\li
文件 2 2012-09-23 16:48 huangcc\huangcc\Debug\li
文件 3562 2012-09-23 16:48 huangcc\huangcc\Debug\li
文件 6218 2012-09-23 16:48 huangcc\huangcc\Debug\li
文件 2226 2012-09-23 16:48 huangcc\huangcc\Debug\li
文件 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个文件信息
- 上一篇:浅水方程C++源代码
- 下一篇:VC++ OpenGL三维地形漫游
评论
共有 条评论