资源简介

IP数据包的捕获与解析,捕获原则是规定IP数据包的个数,C++语言实现,控制台输出运行结果

资源截图

代码片段和文件信息

// PacketParse.cpp : 定义控制台应用程序的入口点。
//

#include “stdafx.h“
#include 
#include 
#include 
#pragma comment(lib“ws2_32.lib“) //加载ws2_32.lib

using namespace std;

#define IO_RCVALL _WSAIOW(IOC_VENDOR1)

typedef struct IP_HEAD //定义IP头部结构
{
union
{
unsigned char Version; //版本(字节的前4位)
unsigned char HeadLen; //头部长度(字节的后4位)
};
unsigned char ServiceType; //服务类型
unsigned short TotallLen; //总长度
unsigned short Identifier; //标识符
union 
{
unsigned short Flags; //标志位(字节的前3位)
unsigned short FragOffset; //片偏移(字节的后13位)
};
unsigned char TimeToLive; //生存周期
unsigned char Protocol; //协议
unsigned short HeadChecksum; //头部校验和
unsigned int SourceAddr; //源IP地址
unsigned int DestinAddr; //目的IP地址
unsigned char Options; //选项
}ip_head;

void main()
{
int packsum;
cout << “请输入捕获IP数据包的个数:“ << endl;
cin >> packsum;

//建立与Socket库绑定
WSADATA WSAData; 
if (WSAStartup(MAKEWORD(2 2) &WSAData) != 0)
{
cout << endl << “WSAStartup初始化失败“ << endl;
return;
}

//创建原始Socket
SOCKET sock = socket(AF_INET SOCK_RAW IPPROTO_IP);
if (sock == INVALID_SOCKET) 
{
cout << endl << “创建Socket失败“ << endl;
cout << WSAGetLastError() << endl;
return;
}

//设置IP头操作选项
int flag = 1;
if (setsockopt(sock IPPROTO_IP IP_HDRINCL (char*)&flag sizeof(flag))
== SOCKET_ERROR) 
{
cout << endl << “setsockopt操作失败“ << endl;
cout << WSAGetLastError() << endl;
return;
}

//获得本地主机名
char hostName[128];
if (gethostname(hostName 100) == SOCKET_ERROR) 
{
cout << endl << “gethostname操作失败“ << endl;
return;
}

//获取本地IP地址
hostent* pHostIP;
if ((pHostIP = gethostbyname(hostName)) == NULL)
{
cout << endl << “gethostbyname操作失败“ << endl;
return;
}

//填充sockaddr_in
sockaddr_in host_addr;
host_addr.sin_family = AF_INET;
host_addr.sin_port = htons(6000);
host_addr.sin_addr = *(in_addr*)pHostIP->h_addr_list[0];

//socket绑定本地网卡
if (bind(sock (PSOCKADDR)&host_addr sizeof(host_addr)) == SOCKET_ERROR)
{
cout << endl << “bind操作失败“ << endl;
return;
}

DWORD dwBufferLen[10];
DWORD dwBufferInLen = 1;
DWORD dwBytesRetruned = 0;
//设置socket接收所有IP包
if (WSAIoctl(sock IO_RCVALL &dwBufferInLen sizeof(dwBufferInLen)
&dwBufferLen sizeof(dwBufferLen) &dwBytesRetruned NULL NULL)
== SOCKET_ERROR)
{
cout << endl << “WSAIoctl操作失败“ << endl;
return;
}

cout << endl << “开始解析IP包:“ << endl;
char buffer[65535]; //设置缓冲区大小
for (int i = 0; i < packsum; i++) //开始接受IP包
{
if (recv(sock buffer 65535 0)>0)
{
ip_head ip = *(ip_head*)buffer; //缓冲区内容强制转化

//逐位解析IP头部的各字段信息
cout << “---------------------------“ << endl;
cout << “版本:“ << (ip.Version >> 4) << endl;
cout << “头部长度:“ << ((ip.HeadLen & 0x0f) * 4) << endl;
cout << “服务类型:Priority“ << (ip.ServiceType >> 5) << “,Service“ <<
((ip.ServiceType) >> 1 & 0x0f) << endl;
cout << “总长度:“ << ip.TotallLen << endl;
cout << 

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件      70656  2014-11-25 17:04  PacketParse\Debug\PacketParse.exe

     文件     909044  2014-11-25 17:04  PacketParse\Debug\PacketParse.ilk

     文件    1321984  2014-11-25 17:04  PacketParse\Debug\PacketParse.pdb

     文件    3080192  2014-11-19 14:48  PacketParse\ipch\packetparse-d532772c\packetparse-83c17a3f.ipch

     文件       1463  2014-11-25 17:04  PacketParse\PacketParse\Debug\PacketParse.log

     文件     195638  2014-11-25 17:04  PacketParse\PacketParse\Debug\PacketParse.obj

     文件       1482  2014-11-25 17:04  PacketParse\PacketParse\Debug\PacketParse.tlog\cl.command.1.tlog

     文件      31144  2014-11-25 17:04  PacketParse\PacketParse\Debug\PacketParse.tlog\CL.read.1.tlog

     文件        976  2014-11-25 17:04  PacketParse\PacketParse\Debug\PacketParse.tlog\CL.write.1.tlog

     文件       1248  2014-11-25 17:04  PacketParse\PacketParse\Debug\PacketParse.tlog\link.command.1.tlog

     文件       2916  2014-11-25 17:04  PacketParse\PacketParse\Debug\PacketParse.tlog\link.read.1.tlog

     文件        510  2014-11-25 17:04  PacketParse\PacketParse\Debug\PacketParse.tlog\link.write.1.tlog

     文件        157  2014-11-25 17:04  PacketParse\PacketParse\Debug\PacketParse.tlog\PacketParse.lastbuildstate

     文件      11470  2014-11-25 16:08  PacketParse\PacketParse\Debug\stdafx.obj

     文件     773120  2014-11-25 17:04  PacketParse\PacketParse\Debug\vc120.idb

     文件     495616  2014-11-25 17:04  PacketParse\PacketParse\Debug\vc120.pdb

     文件       3903  2014-11-25 17:04  PacketParse\PacketParse\PacketParse.cpp

     文件       6345  2014-11-19 14:59  PacketParse\PacketParse\PacketParse.o

     文件       4620  2014-11-19 14:48  PacketParse\PacketParse\PacketParse.vcxproj

     文件       1318  2014-11-17 13:22  PacketParse\PacketParse\PacketParse.vcxproj.filters

     文件       1538  2014-11-17 13:22  PacketParse\PacketParse\ReadMe.txt

     文件        217  2014-11-17 13:22  PacketParse\PacketParse\stdafx.cpp

     文件        234  2014-11-17 13:22  PacketParse\PacketParse\stdafx.h

     文件        236  2014-11-17 13:22  PacketParse\PacketParse\targetver.h

     文件   34537472  2014-11-27 13:16  PacketParse\PacketParse.sdf

     文件        979  2014-11-17 13:22  PacketParse\PacketParse.sln

    ..A..H.     18944  2014-11-27 13:16  PacketParse\PacketParse.v12.suo

     目录          0  2014-11-25 17:04  PacketParse\PacketParse\Debug\PacketParse.tlog

     目录          0  2014-11-19 14:48  PacketParse\ipch\packetparse-d532772c

     目录          0  2014-12-02 12:51  PacketParse\PacketParse\Debug

............此处省略7个文件信息

评论

共有 条评论