资源简介
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\li
文件 2916 2014-11-25 17:04 PacketParse\PacketParse\Debug\PacketParse.tlog\li
文件 510 2014-11-25 17:04 PacketParse\PacketParse\Debug\PacketParse.tlog\li
文件 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个文件信息
- 上一篇:MFC打印图片文字
- 下一篇:grid report4.5破解版.zip
相关资源
- live555&RTSP;源码解析笔记
- 基于MFC的简易计算器表达式解析
- 深入理解C++11:C++11新特性解析与应用
- VC++解析PSD文件并显示图像源代码
- 2019牛客校招面试题附答案与解析c++篇
- 基于WinPcap的网络数据包捕获与分析源
- 数据结构算法实现及解析—配合严蔚
- 牛客校招面试题附答案与解析c++篇.
- GoF+23种设计模式解析(2nd+Edition).p
- C++语言学习教程
- Visual C++编程技巧典型案例解析
- 最新真正二级C语言机试300题(含填空
- PE-Explorer.7z
- LeetCode答案解析C++版本
- PE文件解析器的原理C语言代码
- 李春葆:数据结构习题与解析(C语言
- C++ 解析H264文件
- 邓俊辉数据结构C++语言版第3版 + 习题
- C语言进阶_重点、难点与疑点解析-完
- 数据结构 C++版 第三版 教材+习题解析
- 数据结构(C++语言版) 第三版完整版
- 数据结构(C++语言版)习题解析-邓俊
- 清华大学-邓俊辉-数据结构c++及习题解
- 数据结构 C++版 习题解析 第三版 邓俊
- shx字体解析
- 邓俊辉数据结构C++版本第三版 正文
- 好书有源码:深入理解C++11新特性解析
- 数据结构第二版王红梅课后习题解析
- 视频捕获代码
- C++ 解析rtsp流后返回Iplimage,用Opengl显
评论
共有 条评论