资源简介
本次设计的目标是捕获网络中的IP数据包,解析数据包的内容,将结果显示在标准输出上,并同时写入日志文件。
实验要求:
1)以命令行形式运行:ipparse logfile , 其中ipparse是程序名,而logfile则代表记录结果的日志文件。
2)在标准输出和日志文件写入捕获的IP包的版本、头长度、服务类型、数据包总长度、数据包标识、分段标志、分段偏移值、生存时间、上层协议类型、头校验和、源IP地址和目的IP地址等内容。
代码片段和文件信息
// AnalysisIP.cpp : 定义控制台应用程序的入口点。
//
#include “stdafx.h“
#include “winsock2.h“
#include “ws2tcpip.h“
#include “iostream“
#include “stdio.h“
#pragma comment(lib“ws2_32.lib“)
using namespace std;
/*定义IP头部数据结构*/
typedef struct _IP_HEADER
{
union
{
BYTE Version; //版本(前四位)
BYTE HdrLen; //报头标长(后四位),IP头长度
};
BYTE ServiceType; //服务类型
WORD TotalLen; //总长度
WORD ID; //标志
union
{
WORD Flags;
WORD FragOff;
};
BYTE TimeToLive; //生存时间
BYTE Protocol; //协议
WORD HdrChksum; //首部检验和
DWORD SrcAddr; //源地址
DWORD DstAddr; //目的地址
BYTE Options;
}IP_HEADER;
/*逐位解析IP头中的信息,获取版本号*/
void getVersion(BYTE b BYTE & version)
{
version = b >> 4;
}
void getIHL(BYTE b BYTE & result)
{
result = (b & 0x0f) * 4;
}
/*解析服务类型*/
char * parseServiceType_getProcedence(BYTE b)
{
switch (b >> 5)
{
case 7:
return “Network Control“;
break;
case 6:
return “Internet work Control“;
break;
case 5:
return “CRITIC/ECP“;
break;
case 4:
return “Flash Override“;
break;
case 3:
return “Flsah“;
break;
case 2:
return “Immediate“;
break;
case 1:
return “Priority“;
break;
case 0:
return “Routine“;
break;
default:
return “Unknow“;
break;
}
}
char * parseServiceType_getTOS(BYTE b)
{
b = (b >> 1) & 0x0f;
switch (b)
{
case 0:
return “Normal service“;
break;
case 1:
return “Minimize monetary cost“;
break;
case 2:
return “Maximize reliability“;
break;
case 4:
return “Maximize throughput“;
break;
case 8:
return “Minimize delay“;
break;
case 15:
return “Maximize security“;
break;
default:
return “Unknow“;
}
}
/* 获取禁止分片标志和分片标志 */
void getFlags(WORD w BYTE & DF BYTE & MF)
{
DF = (w >> 14) & 0x01;
MF = (w >> 13) & 0x01;
}
/* 获取分片偏移量 */
void getFragOff(WORD w WORD & fragOff)
{
fragOff = w & 0x1fff;
}
/*获取协议*/
char * getProtocol(BYTE Protocol)
{
switch (Protocol)
{
case 1:
return “ICMP“;
case 2:
return “IGMP“;
case 4:
return “IP in IP“;
case 6:
return “TCP“;
case 8:
return “EGP“;
case 17:
return “UDP“;
case 41:
return “IPv6“;
case 46:
return “RSVP“;
case 89:
return “OSPF“;
default:
return “UNKNOW“;
}
}
/* 解析IP数据包 */
void ipparse(FILE* file char* buffer)
{
IP_HEADER ip = *(IP_HEADER*)buffer;
fseek(file 0 SEEK_END);
BYTE version;
getVersion(ip.Version version);
fprintf(file “IP包版本=%d\r\n“ version);
BYTE headerLen;
getIHL(ip.HdrLen headerLen);
fprintf(file “头长度=%d(BYTE)\r\n“ headerLen);
fprintf(file “服务类型=%s%s\r\n“
parseServiceType_getProcedence(ip.ServiceType)
parseServiceType_getTOS(ip.ServiceType));
fprintf(file “数据包总长度=%d(BYTE)\r\n“ ip.TotalLen);
fprintf(file “数据包标识=%d\r\n“ ip.ID);
BYTE DF MF;
getFlags(ip.Flags DF MF);
fprintf(file “分段标志 DF=%dMF=%d\r\n“ DF MF);
WORD fragOff;
getFragOff(ip.FragOff
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2016-04-12 20:38 AnalysisIP\
目录 0 2016-04-12 20:38 AnalysisIP\.vs\
目录 0 2016-04-12 20:38 AnalysisIP\.vs\AnalysisIP\
目录 0 2016-04-12 20:38 AnalysisIP\.vs\AnalysisIP\v14\
文件 25088 2016-04-12 20:38 AnalysisIP\.vs\AnalysisIP\v14\.suo
目录 0 2016-04-12 20:38 AnalysisIP\AnalysisIP\
文件 1312 2016-04-12 19:18 AnalysisIP\AnalysisIP.sln
文件 32571392 2016-04-12 20:38 AnalysisIP\AnalysisIP.VC.db
文件 5145 2016-04-12 19:32 AnalysisIP\AnalysisIP\AnalysisIP.cpp
文件 8109 2016-04-12 19:20 AnalysisIP\AnalysisIP\AnalysisIP.vcxproj
文件 1317 2016-04-12 19:18 AnalysisIP\AnalysisIP\AnalysisIP.vcxproj.filters
目录 0 2016-04-12 20:38 AnalysisIP\AnalysisIP\Debug\
文件 84 2016-04-12 19:33 AnalysisIP\AnalysisIP\Debug\AnalysisIP.log
文件 74676 2016-04-12 19:33 AnalysisIP\AnalysisIP\Debug\AnalysisIP.obj
文件 3407872 2016-04-12 19:20 AnalysisIP\AnalysisIP\Debug\AnalysisIP.pch
目录 0 2016-04-12 20:38 AnalysisIP\AnalysisIP\Debug\AnalysisIP.tlog\
文件 183 2016-04-12 19:33 AnalysisIP\AnalysisIP\Debug\AnalysisIP.tlog\AnalysisIP.lastbuildstate
文件 1686 2016-04-12 19:33 AnalysisIP\AnalysisIP\Debug\AnalysisIP.tlog\CL.command.1.tlog
文件 34662 2016-04-12 19:33 AnalysisIP\AnalysisIP\Debug\AnalysisIP.tlog\CL.read.1.tlog
文件 826 2016-04-12 19:33 AnalysisIP\AnalysisIP\Debug\AnalysisIP.tlog\CL.write.1.tlog
文件 1164 2016-04-12 19:33 AnalysisIP\AnalysisIP\Debug\AnalysisIP.tlog\li
文件 3150 2016-04-12 19:33 AnalysisIP\AnalysisIP\Debug\AnalysisIP.tlog\li
文件 428 2016-04-12 19:33 AnalysisIP\AnalysisIP\Debug\AnalysisIP.tlog\li
文件 11859 2016-04-12 19:20 AnalysisIP\AnalysisIP\Debug\stdafx.obj
文件 814080 2016-04-12 19:33 AnalysisIP\AnalysisIP\Debug\vc140.idb
文件 495616 2016-04-12 19:33 AnalysisIP\AnalysisIP\Debug\vc140.pdb
文件 89047 2016-04-12 20:24 AnalysisIP\AnalysisIP\logfile.txt
文件 1531 2016-04-12 19:18 AnalysisIP\AnalysisIP\ReadMe.txt
文件 214 2016-04-12 19:18 AnalysisIP\AnalysisIP\stdafx.cpp
文件 234 2016-04-12 19:18 AnalysisIP\AnalysisIP\stdafx.h
文件 240 2016-04-12 19:18 AnalysisIP\AnalysisIP\targetver.h
............此处省略8个文件信息
相关资源
- 精通Visual C++图像处理编程(第二版)
- Carve CSG 几何造型库
- C++ 连连看146451
- 数据结构用面向对象方法和C++描述 殷
- 基于C++的三维模型体素化程序
- wincap c++ mfc 网络截包 多线程
- KCF跟踪算法(C++)146187
- C++程序设计(谭浩强)146060
- c++图像处理编程
- Effective C++
- Visual C++程序设计与应用教程第二版案
- C++程序设计实践指导
- C++操作SQL Server数据库新增 删除 修改
- C++编写电压电流表仪表盘
- effective c++中文版第三版pdf
- C++ QT5教程 开发大全和教程 完整
- 基于MFC的飞秋实现
- vc++直接控制excel程序打开
- 基于信息熵的属性约简算法c/c++代码
- c++钩子技术实现文件监控
- C++命名管道详解及简单案例基于VS20
- C++匿名管道详解及简单案例基于VS20
- qt编程经典书籍全 QT教程 C++ GUI Qt
- C++纯socket写的FTP服务器
- VS2010 C++ MFC简易计算器
- C++计算任意函数值 积分 线性方程组
- 网上收集的2011.12之前的绝大部分 五子
- PC-Lint 9.0L最新版,附带MISRA C++ 2008 p
- 《深入探索C++对象模型》中文pdf 侯捷
- DataStructuresandAlgorithmsinC++4thEditionbyAd
评论
共有 条评论