77范文网 - 专业文章范例文档资料分享平台

ip数据包的捕获与解析代码

来源:网络收集 时间:2020-06-08 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

// PackCaptureDlg.h:header file #define IPV4_WERSION 4 #define IPV6_WERSION 6 #define ICMP_PACKET 1 #define IGMP_PACKET 2 #define TCP_PACKET 6 #define EGP_PACKET 8 #define UDP_packet 17 #define OSPF_PACKET 89

class CPackCaptureDlg:public CDialog {

public:

//{{AFX_DATA(CFindHostDlg)

enum {IDO=IDO_PACKCAPTURE_DIALOG}; int m_Count;

CString m_Packet; //}}AFX_DATA protected:

//{{AFX_MSG(CFindHostDlg) afx_msg void OnCapture(); //}}AFX_MSG

private: typedef struct IP_HEAD //IP头部结构 {

union {

unsigned char Version; //版本(字节前四位)

unsigned char HeadLen; //头部长度(字节后四位) };

unsigned char ServiceType; //服务类型

unsigned short TotalLen; //总长度

unsigned short Identifier; //标识符

union {

unsigned short Flags; //标志位(字前三位)

unsigned short FragOffset;

//片偏移(字后13位) };

unsigned char TimeToLive; //生存周期

unsigned char Protocol; //协议

unsigned short HeadChecksum; //头部校验和

unsigned int SourceAddr; //源IP地址

unsigned int DestinAddr; //目的IP地址 }ip_head;

typedef struct ICMP_HEAD //ICMP头部结构 {

unsigned char Type; // 类型

unsigned char Code; //代码

unsigned short HeadChecksum; // 头部校验和

unsigned short Identifior; //标识符

unsigned short Sequence; //序号

}icmp_head; };

//PackCaptureDlg.cpp :implementation file #include \

#include \#include \#include \#include \

#pragma comment(lib,\

#define IO_RCVALL _WSAIOW(IOC_VENDOR,1) void CPackCaptureDlg::OnCapture() { WSADATA WSAData; //建立与Socket库绑定 if(WSAStartup(MAKEWORD(2,2),&WSAData)!=0) { MessageBox(\初始化失败!\ return; }

SOCKET Socket; //创建原始Socket Socket=socket(AF_INET,SOCK_RAW,IPPROTO_IP); if(Socket==INVALID_SOCKET) { MessageBox(\创建Socket失败!\ WSACleanup(); return; } int RecvTime=5000; //设置Socket操作选项 if(setsockopt(Socket,SOL_SOCKET,SO_RCVTIMEO,(char *)&RecvTime,sizeof(RecvTime))==SOCKET_ERROR) { MessageBox(\设置Socket选项失败!\ closesocket(Socket); WSACleanup(); return; } char HostName[128]; //获得本地主机名称 if(gethostname(HostName,128)==SOCKET_ERROR) { MessageBox(\获得主机名失败!\ closesocket(Socket); WSACleanup(); return; } hostent* pHostent; //获得本地主机IP地址 pHostent=gethostbyname(HostNmae); if(pHostent==NULL) { MessageBox(\获得主机地址失败!\ closesocket(Socket); WSACleanup(); return; } sockaddr_in HostAddr; //定义Socket地址结构 memset(&HostAddr,0,sizeof(HostAddr)); HostAddr.sin_family=AF_INET; HostAddr.sin_addr.s_addr=(*(in_addr*)pHostent->h_addr).s_addr; int nBind; //绑定Socket与网卡 nBind=bind(Socket,(PSOCKADDR)&HostAddr,sizeof(HostAddr)); if(nBind==SOCKET_ERROR) { MessageBox(\绑定Socket失败!\ closesocket(Socket);

WSACleanup(); return; } DWORD dwValue=1; //设置Socket接受模式 if(ioctlsocket(Socket,IO_RCVALL,&dwValue)==SOCKET_ERROR) { MessageBox(\设置Socket接收器失败!\ closesocket(Socket); WSACleanup(); return; } UpdateData(true); m_Packet=\版本 总长度 标志位 片偏移 协议 源地址 目的地址\\r\\n\ for(int i=0;i>4)==IPV4_VERSION) STR.Format(\ if((IpHead.Version>>4)==IPV6_VERSION) STR.Format(\ m_Packet+=str; str.Format(\ m_Packet+=str; str.Format(\

M=%u\ m_Packet+=str; str.Format(\ m_Packet+=str; switch(IpHead.Protocol) {

case ICMP_PACKET: str.Format(\ break; case IGMP_PACKET: str.Format(\ break; case TCP_PACKET: str.Format(\ break; case EGP_PACKET: str.Format(\ break; case UDP_PACKET: str.Format(\ break; case OSPF_PACKET: str.Format(\ break; }; m_Packet+=str; str.Format(\ m_Packet+=str; str.Format(\ m_Packet+=str; m_Packet+=\ } }

UpdateData(false); closesocket(Socket);

WSACLeanup(); //解除与Socket库绑定 }

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说教育文库ip数据包的捕获与解析代码在线全文阅读。

ip数据包的捕获与解析代码.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/jiaoyu/1101087.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: