📄 icmp.c
字号:
#include "tcpip.h"
#include <string.h>
#define ICMP_TYPE_REPLYECHO 0
#define ICMP_TYPE_UNREACHABLE 3
#define ICMP_TYPE_REQUESTECHO 8
uint8 ICMPInput(PSock psock) {
uint8 type, code;
type = psock->payload[0];
code = psock->payload[1];
switch(type) {
case ICMP_TYPE_REQUESTECHO:
ICMPOutput(psock->src_ip, ICMP_TYPE_REPLYECHO, 0, psock->length - 4, psock->payload + 4);
PutSock(psock);
return (0);
default:
PutSock(psock);
return (1);
}
}
uint8 ICMPOutput(uint32 ip, uint8 type, uint8 code, uint16 length, Octet data[]) {
uint16 chksum;
PSock psock;
psock = GetSock(PROTOCOL_UDP_OR_ICMP, length + 4, 0, ip, NISelect(ip));
psock->payload[0] = type;
psock->payload[1] = code;
h2n16(0, psock->payload + 2);
memcpy(psock->payload + 4, data, length);
chksum = ChkSum(psock->payload, psock->length);
h2n16(chksum, psock->payload + 2);
IPOutput(psock, ICMP_PROTOCOL);
return (0);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -