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

📄 packet.h

📁 一些有C制作Fire Wall的代码
💻 H
字号:
#ifndef PACKET_H
#define PACKET_H

extern "C"
{
	#include "ntddk.h"
	#ifndef dprintf
    #define dprintf		KdPrint
    #endif
}
#include "ndis.h"

//
// Ethernet header
//
typedef struct _ETHERNET_FRAME
{
	unsigned char	DestinationAddress[6];					// 0xFFFFFF is Broadcast
	unsigned char	SourceAddress[6];
	unsigned int	FrameType;								// in host-order

} EHTERNET_FRAME, *PETHERNET_FRAME;

#define ETHERNET_FRAME_LENGTH			14

#define ETHERNET_FRAME_TYPE_INVALID		0xFFFF		// Invalid Ethernet Frame
#define ETHERNET_FRAME_TYPE_TCPIP		0x0800		// TCP/IP Protocol
#define ETHERNET_FRAME_TYPE_PUP			0x0200		// PUP Protocol
#define ETHERNET_FRAME_TYPE_ARP			0x0806		// ARP protocol
#define ETHERNET_FRAME_TYPE_RARP		0x8035		// RAPR Protocol

//
// Ip header
//
typedef struct _IP_HEADER
{
	union
	{
		unsigned char	VersionAndHeaderLength;				// Version 4 bit, Header Length 4 bit * 4
		struct
		{
			unsigned char	HeaderLength : 4;
			unsigned char	Version : 4;
		};
	};
	unsigned char	TypeOfService;
	unsigned int	DatagramLength;
	unsigned int	Id;
	unsigned int	FlagsAndFragmentOffset;					// Flags 3 bit, Fragment Offset 13 bit
	unsigned char	TimeToLive;
	unsigned char	Protocol;
	unsigned int	CheckSum;
	unsigned char	SourceIp[4];
	unsigned char	DestinationIp[4];

} IP_HEADER, *PIP_HEADER;

#define IP_HEADER_LENGTH		20

#define	PROTOCOL_INVALID_IP		0xFF
#define	PROTOCOL_INVALID_TCP	0xFE
#define	PROTOCOL_INVALID_UDP	0xFD
#define	PROTOCOL_INVALID_ICMP	0xFC
#define	PROTOCOL_TCP			0x06
#define PROTOCOL_UDP			0x11
#define PROTOCOL_ICMP			0x01
#define PROTOCOL_IGMP			0x02

#define HEADER_LENGTH_MULTIPLE	4
#define GET_IP_VERSION(verlen)			((verlen & 0xF0) >> 4)
#define GET_IP_HEADER_LENGTH(verlen)	((verlen & 0x0F) * HEADER_LENGTH_MULTIPLE)
#define GET_IP_FLAGS(ffo)				((ffo & 0xE000) >> 13)
#define GET_IP_FRAGMENT_OFFSET(ffo)		(ffo & 0x1FFF)

//
// Tcp Header
//
typedef struct _TCP_HEADER
{
	unsigned int	SourcePort;
	unsigned int	DestinationPort;
	unsigned long	SeqNumber;
	unsigned long	AckNumber;
	union
	{
		unsigned int	LenAndCodeBits;		// Header length 4 bit, Reserved 6 bit, Code Bits 6 bit
		struct
		{
			unsigned int	Reserved1 : 8;
			unsigned int	TcpCode : 6;
			unsigned int	Reserved2 : 2;
		};
		struct
		{
			unsigned int	Reserved3 : 4;
			unsigned int	HeaderLength : 4;
			unsigned int	TcpFin : 1;
			unsigned int	TcpSyn : 1;
			unsigned int	TcpRst : 1;
			unsigned int	TcpPsh : 1;
			unsigned int	TcpAck : 1;
			unsigned int	TcpUrg : 1;
			unsigned int	Reserved4 : 2;
		};
	};
	unsigned int	Window;
	unsigned int	CheckSum;
	unsigned int	UrgentPointer;

} TCP_HEADER, *PTCP_HEADER;

#define TCP_HEADER_LENGTH			20

#define GET_TCP_HEADER_LENGTH(lcb)	(((lcb & 0xF000) >> 12) * HEADER_LENGTH_MULTIPLE)
#define GET_TCP_CODE_BITS(lcb)		(lcb & 0x003F)

//
// Udp Header
//
typedef struct _UDP_HEADER
{
	unsigned int	SourcePort;
	unsigned int	DestinationPort;
	unsigned int	Length;				// including this header 
	unsigned int	CheckSum;

} UDP_HEADER, *PUDP_HEADER;

#define UDP_HEADER_LENGTH		8

//
// Icmp Header
//
typedef struct _ICMP_HEADER
{
	unsigned char	Type;
	unsigned char	Code;				// type sub code
	unsigned int	CheckSum;
	unsigned int	ID;
	unsigned int	Seq;

} ICMP_HEADER, *PICMP_HEADER;

#define ICMP_HEADER_LENGTH	8

#define ICMP_NORMAL			0
#define ICMP_REQUEST		1
#define ICMP_RESPONSE		2

#define NETBIOS_MIN_PACKET_SIZE				48

USHORT
ntohs(
	IN	USHORT		netshort
);
ULONG
ntohl(
	IN	ULONG		netlong
);
#endif 

⌨️ 快捷键说明

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