📄 tcpip_protocol.h
字号:
//=================================================================================
//=================================================================================
//定义MAC类型
#define cMACTYPE_IP 0x0800
#define cMACTYPE_ARP 0x0806
//定义IP协议字段值,我没有找到具体的资料,介绍对应的值。下面这些值,是我自己摸索出来的。
#define cIPTYPE_ICMP 0x0001 //经过Ping测试,应该是这个
#define cIPTYPE_IGMP 0x0002 //可能是
#define cIPTYPE_UDP 0x0011 //可能是
#define cIPTYPE_TCP 0x0006 //可能是
//定义ICMP类型
#define cICMP_PingResponse 0x0000
#define cICMP_PingRequest 0x0008
//定义各种数据报头的依次偏移
#define cHdrOff_MAC_IP 0x0007 //7个字,14个字节
#define cHdrOff_IP_UDP 0x000A //10个字,20个字节(如果没有可选项的话)
#define cHdrOff_IP_ICMP 0x000A //10个字,20个字节(如果没有可选项的话)
#define cHdrOff_IP_IGMP 0x000A //10个字,20个字节(如果没有可选项的话)
#define cHdrOff_UDP_Data 0x0004 //4个字,8个字节
//=================================================================================
// 定义网络上使用的数据结构。
//=================================================================================
struct TIPAddr
{
unsigned short Addr2_1;
unsigned short Addr4_3;
};
struct TMAC
{
unsigned short Addr2_1;
unsigned short Addr4_3;
unsigned short Addr6_5;
};
struct TMACHeader
{
struct TMAC DestMAC; //目的MAC地址
struct TMAC SrcMAC; //源MAC地址
unsigned short MACType; //MAC类型
};
struct TIPHeader //IP首部20个字节
{
unsigned short TOS_Version; //IP
unsigned short TotalLength; //报文总长度
unsigned short ID; //报文标识
unsigned short Flag_Offset; //分段
unsigned short Protocol_TTL; //报文生存周期,以及IP头之后的协议(TCP,UDP,VINES)
unsigned short ChkSum; //校验和
struct TIPAddr SrcAddr; //源IP
struct TIPAddr DestAddr; //目的IP
};
struct TUDPHeader
{
unsigned short SrcPort; //源端口
unsigned short DestPort; //目的端口
unsigned short Length; //信息长度
unsigned short ChkSum; //校验和
};
struct TIGMPHeader
{
unsigned short Type_MRT;
unsigned short ChkSum;
struct TIPAddr GroupAddr;
};
struct TICMPHeader
{
unsigned short Type_Code;
unsigned short ChkSum;
};
struct TPre_UDPHeader //UDP伪头部
{
struct TIPAddr SrcAddr; //源IP
struct TIPAddr DestAddr; //目的IP
unsigned short Protocol_Value; //协议值 17
unsigned short Length; //UDP长度
};
struct TARP
{
unsigned short Hard_Type; //硬件类型 以太网1
unsigned short Protocol_type; //协议类型 网际协议0x0800
unsigned short Protocol_Hard_Length; //协议、硬件地址长度各8位 对于IPV4来说 0x0604
unsigned short OP_Code; //操作码 本机请求ARP=1,应答ARP=2
struct TMAC Send_MACAddr; //发送方的硬件地址
struct TIPAddr Send_IPAddr; //发送方的IP
struct TMAC Receive_MACAddr; //接受方硬件地址
struct TIPAddr Receive_IPAddr; //接受方的IP
};
struct TARPPacket
{
struct TMAC DestMAC; //目的MAC地址
struct TMAC SrcMAC; //源MAC地址
unsigned short MACType; //MAC类型
struct TARP ARP; //ARP 数据
};
struct TUDPPacket
{
struct TMACHeader MACHdr; //MAC 数据头
struct TIPHeader IPHdr; //IP 数据头
struct TUDPHeader UDPHdr; //UDP 数据头
unsigned short FirstData; //我们的数据由此开始
};
struct TClientInfo
{
struct TMAC MAC; //用户的MAC地址
struct TIPAddr IP; //用户的IP地址
unsigned short Port; //用户的端口
};
/*union TPacketHeader
{
struct TUDPPacket UDPHeader;
struct TARPPacket ARPHeader;
};*/
struct TIP_MAC_Table
{
struct TIPAddr ip;
struct TMAC MAC;
};
//=================================================================================
//=================================================================================
void IP_Init();
void IP_DispatchPacket(unsigned short * pData);
void IP_SendARP(struct TIPAddr ip);
//=================================================================================
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -