⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 as_packet.h

📁 实现了在arp欺骗环境下
💻 H
字号:
//////////////////////////////////////////////////////////////////////////
// protoinfo.h文件
//////////////////////////////////////////////////////////////////////////

/*
定义协议格式
定义协议中使用的宏
*/

#ifndef __AS_PACKET_H__
#define __AS_PACKET_H__

#include "as_type.h"

#define ETHERTYPE_IP    0x0800
#define ETHERTYPE_ARP   0x0806
#define	ARP_REPLY		0x0002			/* ARP reply */
#define ARPHRD_ETHER 	1
#define ARP_LEN			48
// 协议
#define PROTO_TCP	0x06
#define PROTO_UDP	0x11

typedef struct ip_address
{
    u_int8 byte1;
    u_int8 byte2;
    u_int8 byte3;
    u_int8 byte4;
}ip_address;

#pragma pack(push, 1)//取消内存大小自动对齐

// 14字节的以太头
typedef struct _ETHeader         
{
	u_int8	dhost[6];			// 目的MAC地址destination mac address
	u_int8	shost[6];			// 源MAC地址source mac address
	u_int16	type;				// 下层协议类型,如IP(ETHERTYPE_IP)、ARP(ETHERTYPE_ARP)等
} ETHeader, *PETHeader;

// 28字节的ARP头
typedef struct _ARPHeader		
{
	u_int16	hrd;				//	硬件地址空间,以太网中为ARPHRD_ETHER
	u_int16	eth_type;			//  以太网类型,ETHERTYPE_IP ??
	u_int8	maclen;				//	MAC地址的长度,为6
	u_int8	iplen;				//	IP地址的长度,为4
	u_int16	opcode;				//	操作代码,ARPOP_REQUEST为请求,ARPOP_REPLY为响应
	u_int8	smac[6];			//	源MAC地址
	u_int32	saddr;			//	源IP地址
	u_int8	dmac[6];			//	目的MAC地址
	u_int32	daddr;			//	目的IP地址
} ARPHeader, *PARPHeader;

// 20字节的IP头
typedef struct _IPHeader		
{
    u_int8 iphVerLen;      // 版本号和头长度(各占4位)
    u_int8 ipTOS;          // 服务类型 
    u_int16 ipLength;       // 封包总长度,即整个IP报的长度
    u_int16 ipID;			  // 封包标识,惟一标识发送的每一个数据报
    u_int16 ipFlags;	      // 标志
    u_int8 ipTTL;	      // 生存时间,就是TTL
    u_int8 ipProtocol;     // 协议,可能是TCP、UDP、ICMP等
    u_int16 ipChecksum;     // 校验和
	union {
		u_int32 ipSource;
		ip_address ipSourceByte;
	};
	union {
		u_int32   ipDestination;
		ip_address ipDestinationByte;
	};
} IPHeader, *PIPHeader; 

// 20字节的TCP头
typedef struct _TCPHeader		
{
	u_int16	sourcePort;			// 16位源端口号
	u_int16	destinationPort;	// 16位目的端口号
	u_int32	sequenceNumber;		// 32位序列号
	u_int32	acknowledgeNumber;	// 32位确认号
	u_int8	dataoffset;			// 高4位表示数据偏移
	u_int8	flags;				// 6位标志位
#define FIN		0x01
#define SYN		0x02
#define RST		0x04 
#define PUSH	0x08
#define ACK		0x10
#define URG		0x20
#define ACE		0x40
#define CWR		0x80
	u_int16	windows;			// 16位窗口大小
	u_int16	cksum;			// 16位校验和
	u_int16	urgentPointer;		// 16位紧急数据偏移量 
} TCPHeader, *PTCPHeader;

//8个字节UDP头部
typedef struct _UDPHeader		
{
	u_int16 sport;
	u_int16 dport;
	u_int16 udp_len;
	u_int16 cksum;
} UDPHeader, *PUDPHeader;

//DNS数据报
typedef struct _DNSPacket
{
	u_int16 ID;					//标示
	u_int16 QR;					//标志
	u_int16 QDCount;			//问题数
	u_int16 ANCount;			//资源记录数
	u_int16 NSCount;			//授权资源记录数
	u_int16 ARCount;			//额外资源记录数
} DNSHeader, *PDNSHeader;

#pragma pack(pop)

#endif // __AS_PACKET_H__

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -