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

📄 icmp.cc

📁 南京航空航天大学开发的一个类Unix和Linux的操作系统,好不好看看就知道了,
💻 CC
字号:
#include "root.h"#include "ip.h" #include "icmp.h"#include <dev/net/eth.h>/* the layout of icmp reply packet:	char link[LINKHLEN];	char iphdr[sizeof(iphdr_t)];	char icmphdr[sizeof(icmphdr_t)];	char old iphdr[sizeof(iphdr_t)];	char old ipdata[8]; */void icmpoutput(pkt_t *oldpkt, int type, int code){	pkt_t * pkt = newpkt(AKERN, LINKIPHLEN, sizeof(icmphdr_t) + sizeof(iphdr_t) + 8);	if (!pkt)		return;	icmphdr_t *ich = (icmphdr_t*) pkt->data;	ich->type = type;	ich->code = code;	ich->chksum = 0;	iphdr_t *oldih = (iphdr_t*) oldpkt->data;	memcpy(pkt->data + sizeof(icmphdr_t), oldih, sizeof(iphdr_t) + 8);	ich->chksum = ipchksum(ich, pkt->datalen);	ipoutput(pkt, IPPROTOICMP, oldih->daddr, oldih->saddr);}/* we don't reuse the request pkt */void icmpechorequest(pkt_t *oldpkt, iphdr_t *oldih, icmphdr_t *oldich){	int ichtotlen = oldih->datalen(); /* include icmp header and data */	pkt_t * pkt = newpkt(AUSER, LINKIPHLEN, ichtotlen);	if (!pkt)		return;	memcpy(pkt->data, oldich, ichtotlen);	icmphdr_t *ich = (icmphdr_t*) pkt->data;	ich->type = ICTECHOREPLY;	ich->code = 0;	ich->chksum = 0;	ich->chksum = ipchksum(ich, ichtotlen);	ipoutput(pkt, IPPROTOICMP, oldih->daddr, oldih->saddr);}/* return > 0 if the packet is processed(and deleted)   ip header is not strriped yet */int icmpinput(pkt_t *pkt){	iphdr_t * ih = (iphdr_t*) pkt->data;	icmphdr_t * ich = (icmphdr_t*)(ih + 1);	if (ipchksum(ich, ih->datalen())) {		warn("icmp chksum failed!\n");		delpkt(pkt);		return 1;	}	switch (ich->type) {		case ICTECHOREQUEST:			icmpechorequest(pkt, ih, ich);			delpkt(pkt);			return 1;		case ICTECHOREPLY:			break;		case ICTDSTUNREACH:			break;		case ICTSRCQUENCH:		case ICTREDIRECT:		case ICTTIMEEXCEEDED:		case ICTPARAPROBLEM:		case ICTTIMESTAMPREQUEST:		case ICTTIMESTAMPREPLY:		case ICTINFOREQUEST:		case ICTINFOREPLY:		case ICTADDRREQUEST:		case ICTADDRREPLY:			break;		default:			printd("icmpinput:unknown type\n");	}	return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -