资源简介
点击exe文件可以直接在命令行窗口下运行,支持手动输入时间,输出IP包的信息
代码片段和文件信息
/*******************************************/
/* 运行环境:Visual Stdio2015 */
/*******************************************/
#include “stdafx.h“
#include “winsock2.h“
#include “ws2tcpip.h“
#include “iostream“
#include “stdio.h“
#include
#include
#pragma comment(lib“ws2_32.lib“)
using namespace std;
string str1[200];//存储源IP地址
int str2[200];//存储IP出现次数
/*定义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数据包 */
string ipparse(FILE* file char* bufferint count)
{
IP_HEADER ip = *(IP_HEADER*)buffer;
fseek(file 0 SEEK_END);
fprintf(file “第%d个数据包\r\n“ count);
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.S
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2017-06-04 15:40 解析IP数据包\
文件 6751 2016-12-22 08:41 解析IP数据包\AnalysisIP.cpp
文件 1450496 2016-12-21 20:02 解析IP数据包\AnalysisIP.exe
文件 214 2016-04-12 19:18 解析IP数据包\stdafx.cpp
文件 234 2016-04-12 19:18 解析IP数据包\stdafx.h
文件 240 2016-04-12 19:18 解析IP数据包\targetver.h
评论
共有 条评论