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

📄 icmp.c

📁 包括EPA协议栈
💻 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 + -