解析IP数据包 小程序C++实现
本次设计的目标是捕获网络中的IP数据包,解析数据包的内容,将结果显示在标准输出上,并同时写入日志文件。
实验要求:
1)以命令行形式运行:ipparse logfile , 其中ipparse是程序名,而logfile则代表记录结果的日志文件。
2)在标准输出和日志文件写入捕获的IP包的版本、头长度、服务类型、数据包总长度、数据包标识、分段标志、分段偏移值、生存时间、上层协议类型、头校验和、源IP地址和目的IP地址等内容。
代码片段和文件信息
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2016-04-12 20:38 AnalysisIP
目录 0 2016-04-12 20:38 AnalysisIP.vs
目录 0 2016-04-12 20:38 AnalysisIP.vsAnalysisIP
目录 0 2016-04-12 20:38 AnalysisIP.vsAnalysisIPv14
文件 25088 2016-04-12 20:38 AnalysisIP.vsAnalysisIPv14.suo
目录 0 2016-04-12 20:38 AnalysisIPAnalysisIP
文件 1312 2016-04-12 19:18 AnalysisIPAnalysisIP.sln
文件 32571392 2016-04-12 20:38 AnalysisIPAnalysisIP.VC.db
文件 5145 2016-04-12 19:32 AnalysisIPAnalysisIPAnalysisIP.cpp
文件 8109 2016-04-12 19:20 AnalysisIPAnalysisIPAnalysisIP.vcxproj
文件 1317 2016-04-12 19:18 AnalysisIPAnalysisIPAnalysisIP.vcxproj.filters
目录 0 2016-04-12 20:38 AnalysisIPAnalysisIPDebug
文件 84 2016-04-12 19:33 AnalysisIPAnalysisIPDebugAnalysisIP.log
文件 74676 2016-04-12 19:33 AnalysisIPAnalysisIPDebugAnalysisIP.obj
文件 3407872 2016-04-12 19:20 AnalysisIPAnalysisIPDebugAnalysisIP.pch
目录 0 2016-04-12 20:38 AnalysisIPAnalysisIPDebugAnalysisIP.tlog
文件 183 2016-04-12 19:33 AnalysisIPAnalysisIPDebugAnalysisIP.tlogAnalysisIP.lastbuildstate
文件 1686 2016-04-12 19:33 AnalysisIPAnalysisIPDebugAnalysisIP.tlogCL.command.1.tlog
文件 34662 2016-04-12 19:33 AnalysisIPAnalysisIPDebugAnalysisIP.tlogCL.read.1.tlog
文件 826 2016-04-12 19:33 AnalysisIPAnalysisIPDebugAnalysisIP.tlogCL.write.1.tlog
文件 1164 2016-04-12 19:33 AnalysisIPAnalysisIPDebugAnalysisIP.tloglink.command.1.tlog
文件 3150 2016-04-12 19:33 AnalysisIPAnalysisIPDebugAnalysisIP.tloglink.read.1.tlog
文件 428 2016-04-12 19:33 AnalysisIPAnalysisIPDebugAnalysisIP.tloglink.write.1.tlog
文件 11859 2016-04-12 19:20 AnalysisIPAnalysisIPDebugstdafx.obj
文件 814080 2016-04-12 19:33 AnalysisIPAnalysisIPDebugvc140.idb
文件 495616 2016-04-12 19:33 AnalysisIPAnalysisIPDebugvc140.pdb
文件 89047 2016-04-12 20:24 AnalysisIPAnalysisIPlogfile.txt
文件 1531 2016-04-12 19:18 AnalysisIPAnalysisIPReadMe.txt
文件 214 2016-04-12 19:18 AnalysisIPAnalysisIPstdafx.cpp
文件 234 2016-04-12 19:18 AnalysisIPAnalysisIPstdafx.h
文件 240 2016-04-12 19:18 AnalysisIPAnalysisIP argetver.h
............此处省略8个文件信息
// 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
“ version);
BYTE headerLen;
getIHL(ip.HdrLen headerLen);
fprintf(file “头长度=%d(BYTE)
“ headerLen);
fprintf(file “服务类型=%s%s
“
parseServiceType_getProcedence(ip.ServiceType)
parseServiceType_getTOS(ip.ServiceType));
fprintf(file “数据包总长度=%d(BYTE)
“ ip.TotalLen);
fprintf(file “数据包标识=%d
“ ip.ID);
BYTE DF MF;
getFlags(ip.Flags DF MF);
fprintf(file “分段标志 DF=%dMF=%d
“ 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.vsAnalysisIP
目录 0 2016-04-12 20:38 AnalysisIP.vsAnalysisIPv14
文件 25088 2016-04-12 20:38 AnalysisIP.vsAnalysisIPv14.suo
目录 0 2016-04-12 20:38 AnalysisIPAnalysisIP
文件 1312 2016-04-12 19:18 AnalysisIPAnalysisIP.sln
文件 32571392 2016-04-12 20:38 AnalysisIPAnalysisIP.VC.db
文件 5145 2016-04-12 19:32 AnalysisIPAnalysisIPAnalysisIP.cpp
文件 8109 2016-04-12 19:20 AnalysisIPAnalysisIPAnalysisIP.vcxproj
文件 1317 2016-04-12 19:18 AnalysisIPAnalysisIPAnalysisIP.vcxproj.filters
目录 0 2016-04-12 20:38 AnalysisIPAnalysisIPDebug
文件 84 2016-04-12 19:33 AnalysisIPAnalysisIPDebugAnalysisIP.log
文件 74676 2016-04-12 19:33 AnalysisIPAnalysisIPDebugAnalysisIP.obj
文件 3407872 2016-04-12 19:20 AnalysisIPAnalysisIPDebugAnalysisIP.pch
目录 0 2016-04-12 20:38 AnalysisIPAnalysisIPDebugAnalysisIP.tlog
文件 183 2016-04-12 19:33 AnalysisIPAnalysisIPDebugAnalysisIP.tlogAnalysisIP.lastbuildstate
文件 1686 2016-04-12 19:33 AnalysisIPAnalysisIPDebugAnalysisIP.tlogCL.command.1.tlog
文件 34662 2016-04-12 19:33 AnalysisIPAnalysisIPDebugAnalysisIP.tlogCL.read.1.tlog
文件 826 2016-04-12 19:33 AnalysisIPAnalysisIPDebugAnalysisIP.tlogCL.write.1.tlog
文件 1164 2016-04-12 19:33 AnalysisIPAnalysisIPDebugAnalysisIP.tlogli
文件 3150 2016-04-12 19:33 AnalysisIPAnalysisIPDebugAnalysisIP.tlogli
文件 428 2016-04-12 19:33 AnalysisIPAnalysisIPDebugAnalysisIP.tlogli
文件 11859 2016-04-12 19:20 AnalysisIPAnalysisIPDebugstdafx.obj
文件 814080 2016-04-12 19:33 AnalysisIPAnalysisIPDebugvc140.idb
文件 495616 2016-04-12 19:33 AnalysisIPAnalysisIPDebugvc140.pdb
文件 89047 2016-04-12 20:24 AnalysisIPAnalysisIPlogfile.txt
文件 1531 2016-04-12 19:18 AnalysisIPAnalysisIPReadMe.txt
文件 214 2016-04-12 19:18 AnalysisIPAnalysisIPstdafx.cpp
文件 234 2016-04-12 19:18 AnalysisIPAnalysisIPstdafx.h
文件 240 2016-04-12 19:18 AnalysisIPAnalysisIP argetver.h
............此处省略8个文件信息
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。
评论列表(条)