• 大小: 13.37MB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-06-19
  • 语言: C/C++
  • 标签: C++  

资源简介

本次设计的目标是捕获网络中的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\link.command.1.tlog
     文件        3150  2016-04-12 19:33  AnalysisIP\AnalysisIP\Debug\AnalysisIP.tlog\link.read.1.tlog
     文件         428  2016-04-12 19:33  AnalysisIP\AnalysisIP\Debug\AnalysisIP.tlog\link.write.1.tlog
     文件       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个文件信息

评论

共有 条评论