报文解析各协议结构体

#pragma once

#include <WinSock2.h>


#pragma pack(1)

typedef struct tagEthernetIIPacketTail
{
	UCHAR chDesAddr[6];
	UCHAR chSrcAddr[6];
	USHORT type;
}tagEthernetIIPacketTail;

#pragma pack()


#pragma pack(1)
typedef struct CDataHead
{
	struct timeval ts;
	UINT32 caplen;     /* length of portion present */
	UINT32 len;        /* length this packet (off wire) */
}CDataHeader;

struct CDataHeadAndEthernet
{
	CDataHead header;
	tagEthernetIIPacketTail ethernet;

#define header_ts header.ts
#define header_caplen header.caplen
#define header_len header.len
};
#pragma pack()

#pragma pack(1)

struct iphdr {
	UCHAR ihl:4,
		  version:4;
	UCHAR	tos;
	USHORT	tot_len;
	USHORT	id;
	union{
		USHORT frag_off;

		struct ip_flag
		{
			UCHAR flag_unused:5,
				  flag_MoreFrag:1,
				  flag_DontFrag:1,
				  flag_Reserve:1;
			UCHAR reserve;
		}u_flag;
	}u_flag_off;

	UCHAR	ttl;
	UCHAR	protocol;
	USHORT	check;
	UINT32	saddr;
	UINT32	daddr;
	/*The options start here. */
};
#pragma pack()
#pragma pack(1)
typedef struct arphdr
{
	//arp首部
	unsigned short arp_hrd;    /* format of hardware address */
	unsigned short arp_pro;    /* format of protocol address */
	unsigned char arp_hln;    /* length of hardware address */
	unsigned char arp_pln;    /* length of protocol address */
	unsigned short arp_op;     /* ARP/RARP operation */

	unsigned char arp_sha[6];    /* sender hardware address */
	unsigned long arp_spa;    /* sender protocol address */
	unsigned char arp_tha[6];    /* target hardware address */
	unsigned long arp_tpa;    /* target protocol address */
}ARPHDR, *PARPHDR;
#pragma pack()
#pragma pack(1)
typedef struct DhcpPacketPart
{
	UCHAR op;   // 反向为2
	UCHAR hType;   // 硬件类别,ethernet为1
	UCHAR hLen;    // 硬件长度,ethernet为6 
	UCHAR hops;    // 若数据包需经过router传送,每站加1,若在同一网内,为0 
	UINT32 transactionID;    // 事务ID,是个随机数,用于客户和服务器之间匹配请求和相应消息
	USHORT seconds;    // 由用户指定的时间,指开始地址获取和更新进行后的时间
	USHORT Flags;    // 从0-15bits,最左一bit为1时表示server将以广播方式传送封包给 client,其余尚未使用; 
	UINT32 ciAddr;    // 用户IP地址; 
	UINT32 yiAddr;    // 客户IP地址; 
	UINT32 siAddr;    // 用于bootstrap过程中的IP地址; 
	UINT32 giAddr;    // 转发代理(网关)IP地址; 
	char chaddr[16];    // :client的硬件地址; 
	char sname[64];   // :可选server的名称,以0x00结尾; 
	char File[128];   // 启动文件名; 
	//? Options没有解析,有无表示该选项存在的标志
}DhcpPacketPart;
#pragma pack()
#pragma pack(1)
typedef struct option
{
	UCHAR type;
	UCHAR Len;
	CString value;
}option;
#pragma pack()
#pragma pack(1)
typedef struct DnsPacketPart
{
	unsigned short u16Identification;
	unsigned char rd:1
				  ,tc:1
				  ,aa:1
				  ,Opcode:4
				  ,qa:1;
	unsigned char rcod:4
		          ,cd:1
				  ,ad:1
				  ,z:1
				  ,ra:1;
	unsigned short u16Questions;
	unsigned short u16AnswerRRs;
	unsigned short u16AuthorityRRs;
	unsigned short u16AdditionalRRs;
}DnsPacketPart;
#pragma pack()
#pragma pack(1)
typedef struct tagQuestionInfo
{
	CString wsDomainName;
	USHORT u16Type;
	USHORT u16Class;
}tagQuestionInfo;
#pragma pack()
#pragma pack(1)
typedef struct tagResourceRecordInfo
{
	CString wsDomainName;
	USHORT u16Type;
	USHORT u16Class;
	UINT32 u32TTL;
	USHORT u16RdataLen;
	CString wsRdata;
}tagAnswerInfo;
#pragma pack()
#pragma pack(1)
typedef struct GtpPacketHeader
{
	UCHAR 
         pn:1
		,s:1
		,e:1
		,x:1
		,pt:1
        ,ver:3;   
	UCHAR messageType;   
	USHORT hLen;    
	UINT32 teId;
	USHORT sequenceNumber;  
	UCHAR npduNumber; 
	UCHAR nextExtensionHeaderType;
}GtpPacketHeader;
#pragma pack()
#pragma pack(1)
struct icmp6hdr {

	UCHAR		icmp6_type;
	UCHAR		icmp6_code;
	USHORT		icmp6_cksum;

	union {
		UINT32			un_data32[1];
		USHORT			un_data16[2];
		UCHAR			un_data8[4];

		struct icmpv6_echo {
			USHORT		identifier;
			USHORT		sequence;
		} u_echo;

		struct icmpv6_nd_advt {
			UINT32		router:1,
						solicited:1,
						override:1,
						reserved:29;
		} u_nd_advt;

		struct icmpv6_nd_ra {
			UCHAR		hop_limit;
			UCHAR		managed:1,
						other:1,
						router_pref:2,
						reserved:4;
			USHORT		rt_lifetime;
		} u_nd_ra;

	} icmp6_dataun;

#define icmp6_identifier	icmp6_dataun.u_echo.identifier
#define icmp6_sequence		icmp6_dataun.u_echo.sequence
#define icmp6_pointer		icmp6_dataun.un_data32[0]
#define icmp6_mtu		icmp6_dataun.un_data32[0]
#define icmp6_unused		icmp6_dataun.un_data32[0]
#define icmp6_maxdelay		icmp6_dataun.un_data16[0]
#define icmp6_nextHopMTU	icmp6_dataun.un_data16[1]
#define icmp6_router		icmp6_dataun.u_nd_advt.router
#define icmp6_solicited		icmp6_dataun.u_nd_advt.solicited
#define icmp6_override		icmp6_dataun.u_nd_advt.override
#define icmp6_ndiscreserved	icmp6_dataun.u_nd_advt.reserved
#define icmp6_hop_limit		icmp6_dataun.u_nd_ra.hop_limit
#define icmp6_addrconf_managed	icmp6_dataun.u_nd_ra.managed
#define icmp6_addrconf_other	icmp6_dataun.u_nd_ra.other
#define icmp6_rt_lifetime	icmp6_dataun.u_nd_ra.rt_lifetime
#define icmp6_router_pref	icmp6_dataun.u_nd_ra.router_pref
};
#pragma pack()
#pragma pack(1)
typedef struct RtpPacketPart
{
	USHORT 
		 pt:7
		,m:1
		,cc:4
		,x:1
		,p:1
		,ver:2;   
	USHORT sequenceNumber;   
	UINT32 timestamp;    
	UINT32 ssrc;    
	//? CSRC没有解析,有无表示该选项存在的标志
}RtpPacketPart;
#pragma pack()
#pragma pack(1)
typedef struct StpPacketPart
{
	USHORT protocolIndentifier;   
	UCHAR ver;   
	UCHAR messageType;    
	UCHAR flages; 
	USHORT rootPriority;
	UCHAR rootId[6];    
	UINT32 rotPathCost;  
	USHORT bridgePriority;
	UCHAR	bridgeId[6];    
	USHORT portId;    
	USHORT messageAge;    
	USHORT maximum;    
	USHORT helloTime;     
	USHORT forwardDelay;    
}StpPacketPart;
#pragma pack()
#pragma pack(1)
typedef struct tcphdr {
	USHORT	source;
	USHORT	dest;
	UINT32	seq;
	UINT32	ack_seq;
	UCHAR	res1:4,
		    doff:4;
	UCHAR	fin:1,
			syn:1,
			rst:1,
			psh:1,
			ack:1,
			urg:1,
			ece:1,
			cwr:1;
	USHORT	window;
	USHORT	check;
	USHORT	urg_ptr;
}TCPHDR,*PTCPHDR;
#pragma pack()
#pragma pack(1)
typedef struct tcpoption
{
	CString value;
}TCPOPTION;
#pragma pack()
#pragma pack(1)
typedef struct udphdr {
	USHORT  source;
	USHORT  dest;
	USHORT  len;
	USHORT check;
}UDPHDR, *PUDPHDR;
#pragma pack()
#pragma pack(1)
typedef struct VrrpPacketPart
{
	unsigned char u8VerAndType;
	unsigned char u8VirtualRtrID;
	unsigned char u8Priority;
	unsigned char u8CountIPAddrs;
	unsigned char u8AuthType;
	unsigned char u8AdverInt;
	USHORT	u16Checksum;
}VrrpPacketPart;

#pragma pack()

#pragma pack(1)

typedef union {
	unsigned char b[4];
	UINT32 l;
} IPaddr;

#pragma pack()


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT_NEU_2009

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值