问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

跪求一份完整可执行代码,对通过本地网卡的IP数据包捕获并分析,最好有图形化界面。1124964206@qq.com多谢

发布网友 发布时间:2022-04-26 20:03

我来回答

2个回答

热心网友 时间:2023-10-27 00:31

#include "stdio.h"
#include "winsock2.h"
#include "ws2tcpip.h"
#include "iostream.h"

#pragma comment(lib,"ws2_32.lib")

typedef struct _IP_HEADER //定义IP头
{

union
{
BYTE Version; //版本(前4位)
BYTE HdrLen; //IHL(后4位),标头长&首*度
};
BYTE ServiceType; //服务类型
WORD TotalLen; //16位总长度
WORD ID; //16位标识
union
{
WORD Flags; //3位标志
WORD FragOff; //分段偏移(后13位)
};

BYTE TimeToLive; //生命期
BYTE Protocol; //协议
WORD HdrChksum; //头校验和
DWORD SrcAddr; //源地址
DWORD DstAddr; //目的地址
BYTE Options; //选项
}IP_HEADER;

//逐位解析IP头中的信息

void getVersion(BYTE b,BYTE &version)
{
version=b>>4; //右移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; //获取服务类型字段中的TOS子域

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) //获取协议字段共8位

{

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";

}

}

void ipparse(FILE* file,char* buffer)

{

IP_HEADER ip=*(IP_HEADER*)buffer; //通过指针把缓冲区的内容强制转化为IP_HEADER数据结构

fseek(file,0,SEEK_END);

BYTE Version;

getVersion(ip.Version,Version);

fprintf(file,"版本号=%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=%d,MF=%d\r\n",DF,MF);

WORD fragOff;

getFragOff(ip.FragOff,fragOff);

fprintf(file,"分段偏移值=%d\r\n",fragOff);

fprintf(file,"生存期=%d (hopes)\r\n",ip.TimeToLive);

fprintf(file,"协议=%s\r\n",getProtocol(ip.Protocol));

fprintf(file,"头校验和=0x%0x\r\n",ip.HdrChksum);

fprintf(file,"源IP地址=%s\r\n",inet_ntoa(*(in_addr*)&ip.SrcAddr));

fprintf(file,"目的IP地址=%s\r\n",inet_ntoa(*(in_addr*)&ip.DstAddr));

fprintf(file,"---------------------------------------------\r\n");

}

main()
{

int nRetCode = 0;

// initialize MFC and print and error on failure

{

// TODO: code your application's behavior here.

FILE * file;

if((file=fopen("history.txt","wb+"))==NULL)

{

printf("fail to open file %s");

return -1;

}

WSADATA wsData;

WSAStartup(MAKEWORD(2,2),&wsData);

//建立套接字

SOCKET sock;

sock=socket(AF_INET,SOCK_RAW,IPPROTO_IP);

BOOL flag=TRUE;

//设置IP头操作选项,用户可对IP头处理

setsockopt(sock,IPPROTO_IP,IP_HDRINCL,(char*)&flag,sizeof(flag));

char hostName[128];

gethostname(hostName,100);

//获取本地地址

hostent * pHostIP;

pHostIP=gethostbyname(hostName);

//填充SOCKADDR_IN结构

sockaddr_in addr_in;

addr_in.sin_addr=*(in_addr*)pHostIP->h_addr_list[0];

addr_in.sin_family=AF_INET;

addr_in.sin_port=htons(6000);

bind(sock,(PSOCKADDR)&addr_in,sizeof(addr_in)); //把socket绑定到本地网卡

DWORD dwValue=1;

//设置SOCK_RAW为SIO_RCVALL,能接收所有IP包

#define IO_RCVALL _WSAIOW(IOC_VENDOR,1)

DWORD dwBufferLen[10];

DWORD dwBufferInLen=1;

DWORD dwBytesReturned=0;

WSAIoctl(sock,IO_RCVALL,&dwBufferInLen,sizeof(dwBufferInLen),&dwBufferLen,sizeof(dwBufferLen),&dwBytesReturned,NULL,NULL);

//设置接受数据包缓冲区长度

#define BUFFER_SIZE 65535

char buffer[BUFFER_SIZE];

//监听网卡

printf("开始解析Ray的电脑:\n");

char inkey;
do

{

int size=recv(sock,buffer,BUFFER_SIZE,0);

if(size>0)

ipparse(stdout,buffer);
if(size>0)
ipparse(file,buffer);

cout<<"是否继续?(y/n)";
cin>>inkey;
cout<<inkey;
}while(inkey=='y'||inkey=='Y');

fclose(file);

return 0;

}

return nRetCode;

}

热心网友 时间:2023-10-27 00:31

有个软件,但是名字忘记了,原名其中有“win”这几个字,国外的,有汉化的,具体的好像叫什么抓包工具,你百度下。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
我小弟要当兵,这几天在等家访,我想问一下需要拿钱之类的吗?_百度知 ... 怎样治好气管炎 怎么治好气管炎 气管炎能彻底治好吗 分手后再遇见前男友是什么感受? 分手后与前任再相遇 指弹怎么练 用吉他练指弹有什么快速入门的办法 皖西学院新生住哪里 皖西学院的宿舍条件好吗? 手机输入信息时前有个 +怎样取消? 短信中心号码加号如何输入? 紧急求助猜谜 马驮春梦四十莱,雁带秋声而八归这句诗谜指的是什么生肖 古代文字中先归的归是什么意思 虎威千里镇八方,行船人的叫八归打一生肖? 要一手宋词,短的 三五一后中二取,二九取三得八归是什么意思 有谁知道姜夔的《八归》?最好有些解释什么的…… 行船人叫八归猜一生肖 什么是八归。 如何设置ipad的页面显示比例? 叫女生美女和小美女有差吗 现在的人喜欢的类型是大美女还是小美女呢? 这个小美女是我的 是叫小美女的漂亮还是较大美女的漂亮? 为什么我的电脑非常的卡 美女和小美女这两个称呼有什么不同? 这个小美女是谁啊? 为什么美女的力气很小? *网络技术,获取ip地址的报文分析求助,如图是对第2条报文的分析。 我看不懂啊,比如第12空为什 vivo手机文件夹里出现的加号怎么去掉 如何在本地机上获取ip报文(包),以便分析其中网络IP,目的IP,内容数据? IP数据报与IP地址的区别及结构分析与帧(数据报)传输的过程 IP数据包的捕获与解析 如何关闭手机下方隐形的 +号? 网络抓包分析实验报告(IP,icmp) iphone打国际长途时 最前面的加号怎么打出来?? 我手机信息的加号在下面怎么调到上面 通过Wireshark分析IP数据报的结构及分片、组装方法 c语言中解析IP数据报文 手机键盘上的加号和箭头是什么意思? 捕捉tracert过程中的icmp报文,分析跟踪的路由器ip是哪个接口的 加分!求一个网络数据包的采集与分析的程序,可以抓捕tcp ,ip等协议的。 如何分析udp报文,从而获取源地址 踩QQ空间留言怎么看留言条数? 我老婆做的梦,梦见我前女友,这是什么情况 现任女友梦到我和前女友复合,她太在乎了吗? 解梦:分手的女友经常梦见我前女友 我现在在处对象,晚上做梦老是梦到前女友,怎么回事 我都忘了她了