📄 netstruct.h
字号:
#ifndef _MONITOR_PCAP_DEFINE_H_
#define _MONITOR_PCAP_DEFINE_H_
#define WM_DATA_TRANSLATE WM_USER+10
//定义ip报头
namespace PROTOCOL_DEFINE
{
//下面的定义参见RFC 1700
#define IP "0x0800"
#define ARP "0x0806"
#define RARP "0x8035"
#define ICMP 1 //控制信息协议
#define TCP 6 //传输控制协议
#define EGP 8 //外部网关协议
#define IGP 9 //内部网关协议
#define UDP 17 //用户数据报协议
struct ETHERNET_HEADER
{
byte des_mac[6]; //接收端的MAC地址
byte src_mac[6]; //发送端的MAC地址
byte type[2]; //类型字段
};
struct IP_HEADER
{
byte ver_len; //版本4位,头长度4位,报头长度以32位为一个单位
byte type; //类型8位
byte length[2]; //总长度,16位,指出报文的以字节为单位的总长度,报文长度不能超过65536个字接,否则认为报文遭到破坏
byte id[2]; //报文标示,用于多于一个报文16位
byte flag_offset[2];//标志,3位 数据块偏移13位
byte time; //生存时间,8位
byte protocol; //协议,8位
byte crc_val[2]; //头校验和,16位
byte src_addr[4]; //源地址,32位
byte des_addr[4]; //目标地址,32位
byte options[4]; //选项和填充,32位
};
struct TCP_HEADER
{
byte src_port[2]; //发送端端口号,16位
byte des_port[2]; //接收端端口号,16位
byte sequence_no[4]; //32位,标示消息端的数据位于全体数据块的某一字节的数字
byte ack_no[4]; //32位,确认号,标示接收端对于发送端接收到数据块数值
byte offset_reser_con[2];//数据偏移4位,预留6位,控制位6为
byte window[2]; //窗口16位
byte checksum[2]; //校验码,16位
byte urgen_pointer[2]; //16位,紧急数据指针
byte options[4]; //选祥和填充,32位
};
struct UDP_HEADER
{
byte src_port[2]; //发送端端口
byte des_port[2]; //接收端端口
byte length[2]; //用户数据报长度
byte check_sum[2]; //校验码
};
struct ICMP_HEADER
{
byte type; //类型字节(1字节)
byte code; //代码字节(1字节)
byte check_sum[2]; //校验码(2字节)
};
struct ARP_PROTOCOL
{
byte hw_type[2]; //硬件类型。以态网表示为1
byte protocol[2]; //网络层协议的类型,例如IP协议为800
byte hw_len; //查询物理地址的字节长度。以态网时为6
byte protocol_len; //查询上层协议地址的字节长度。IPv4时为4
byte opcode[2]; //表示操作内容的数值。1为ARP请求,2为ARP响应,3为RARP请求,4为RARP响应
byte src_mac[6]; //发送端MAC地址
byte src_addr[4]; //发送端的IP地址
byte des_mac[6]; //查询对象的MAC地址
byte des_addr[4]; //查询对象的IP地址
};
int get_IP_HEADER_length(IP_HEADER * ip);
void get_MAC_addr(unsigned char * p,char * buf,int bufsize);
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -