📄 net_ping.c
字号:
void SumCheck(u8 *Addr,u16 len);
void Revert_Ping(void) //回复Ping数据包
{
u16 i,Data_Len,Data_SUM,Len;
//开始拼接Ping的回复数据包开始
//PACK_Type=0x8000;
HEAD_Ethernet(); //以太网头
HEAD_IP(); //IP首部
Len=Start_ICMP;
//ICMP首部
Data_Len=Receive_Buffer[14+2]*256+Receive_Buffer[14+2+1]-20; //ICMP包的长度
Send_Buffer[Len++]=0; //回显应答(Ping应答)
Send_Buffer[Len++]=0;
Send_Buffer[Len++]=0; //校验和
Send_Buffer[Len++]=0;
for (i=0;i<4;i++)
Send_Buffer[Len++]=Receive_Buffer[Len]; //表示符和序号
for (i=0;i<Data_Len-8;i++)
Send_Buffer[Len++]=Receive_Buffer[Len]; //选项数据
//计算校验和
Data_SUM=CHECK_SUM(Send_Buffer,14+20,Data_Len); //ICMP首部校验和
Send_Buffer[14+20+2]=Data_SUM/0x100;
Send_Buffer[14+20+3]=Data_SUM&0xff;
SumCheck(&Send_Buffer[14+20],Data_Len);
//拼接数据包结束
NET_Send_Packet(Send_Buffer,Len); //发送数据包
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -