亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? icmp.c

?? 網友張巍提供的tcpip協議棧,是一個成功穩定的以太網接口上的TCP/IP協議程序。里面包括有說明
?? C
字號:
/* Internet Control Message Protocol (ICMP)
 */
#include <stdio.h>
#include "global.h"
#include "mbuf.h"
#include "iface.h"
#include "ip.h"
#include "icmp.h"
#include "ping.h"
#include "netuser.h"

struct mib_entry Icmp_mib[] = {
	"",			0,
	"icmpInMsgs",		0,
	"icmpInErrors",		0,
	"icmpInDestUnreachs",	0,
	"icmpInTimeExcds",	0,
	"icmpInParmProbs",	0,
	"icmpInSrcQuenchs",	0,
	"icmpInRedirects",	0,
	"icmpInEchos",		0,
	"icmpInEchoReps",	0,
	"icmpInTimestamps",	0,
	"icmpInTimestampReps",	0,
	"icmpInAddrMasks",	0,
	"icmpInAddrMaskReps",	0,
	"icmpOutMsgs",		0,
	"icmpOutErrors",	0,
	"icmpOutDestUnreachs",	0,
	"icmpOutTimeExcds",	0,
	"icmpOutParmProbs",	0,
	"icmpOutSrcQuenchs",	0,
	"icmpOutRedirects",	0,
	"icmpOutEchos",		0,
	"icmpOutEchoReps",	0,
	"icmpOutTimestamps",	0,
	"icmpOutTimestampReps",	0,
	"icmpOutAddrMasks",	0,
	"icmpOutAddrMaskReps",	0,
};

/* Process an incoming ICMP packet */
void
icmp_input(
struct iface *iface,	/* Incoming interface (ignored) */
struct ip *ip,		/* Pointer to decoded IP header structure */
struct mbuf **bpp,	/* Pointer to ICMP message */
int rxbroadcast,
int32 said
){
	struct icmplink *ipp;
	struct icmp icmp;	/* ICMP header */
	struct ip oip;		/* Offending datagram header */
	uint16 type;		/* Type of ICMP message */
	uint16 length;

	icmpInMsgs++;
	if(rxbroadcast){
		/* Broadcast ICMP packets are to be IGNORED !! */
		icmpInErrors++;
		free_p(bpp);
		return;
	}
	length = ip->length - IPLEN - ip->optlen;
	if(cksum(NULL,*bpp,length) != 0){
		/* Bad ICMP checksum; discard */
		icmpInErrors++;
		free_p(bpp);
		return;
	}
	ntohicmp(&icmp,bpp);

	/* Process the message. Some messages are passed up to the protocol
	 * module for handling, others are handled here.
	 */
	type = icmp.type;
	
	switch(type){
	case ICMP_TIME_EXCEED:	/* Time-to-live Exceeded */
	case ICMP_DEST_UNREACH:	/* Destination Unreachable */
	case ICMP_QUENCH:	/* Source Quench */
	case ICMP_IPSP:		/* Bad security packet */
		switch(type){
		case ICMP_TIME_EXCEED:	/* Time-to-live Exceeded */
			icmpInTimeExcds++;
			break;
		case ICMP_DEST_UNREACH:	/* Destination Unreachable */
			icmpInDestUnreachs++;
			break;
		case ICMP_QUENCH:	/* Source Quench */
			icmpInSrcQuenchs++;
			break;
		}
		ntohip(&oip,bpp);	/* Extract offending IP header */
		if(Icmp_trace){
			printf("ICMP from %s:",inet_ntoa(ip->source));
			printf(" dest %s %s",inet_ntoa(oip.dest),
			 smsg(Icmptypes,ICMP_TYPES,type));
			switch(type){
			case ICMP_TIME_EXCEED:
				printf(" %s\n",
				 smsg(Exceed,NEXCEED,icmp.code));
				break;
			case ICMP_DEST_UNREACH:
				printf(" %s\n",
				 smsg(Unreach,NUNREACH,icmp.code));
				break;
			case ICMP_IPSP:
				printf(" %s\n",smsg(Said_icmp,NIPSP,icmp.code));
				break;
			default:
				printf(" %u\n",icmp.code);
				break;
			}
		}
		for(ipp = Icmplink;ipp->funct != NULL;ipp++)
			if(ipp->proto == oip.protocol)
				break;
		if(ipp->funct != NULL){
			(*ipp->funct)(ip->source,oip.source,oip.dest,icmp.type,
			 icmp.code,bpp);
		}
		break;
	case ICMP_ECHO:		/* Echo Request */
		/* Change type to ECHO_REPLY, recompute checksum,
		 * and return datagram.
		 */
		icmpInEchos++;
		icmp.type = ICMP_ECHO_REPLY;
		htonicmp(&icmp,bpp);
		icmpOutEchoReps++;
		ip_send(ip->dest,ip->source,ICMP_PTCL,ip->tos,0,bpp,length,0,0);
		return;
	case ICMP_REDIRECT:	/* Redirect */
		icmpInRedirects++;
		ntohip(&oip,bpp);	/* Extract offending IP header */
		if(Icmp_trace){
			printf("ICMP from %s:",inet_ntoa(ip->source));
			printf(" dest %s %s",inet_ntoa(oip.dest),
			 smsg(Icmptypes,ICMP_TYPES,type));
			printf(" new gateway %s\n",inet_ntoa(icmp.args.address));
		}
		break;
	case ICMP_PARAM_PROB:	/* Parameter Problem */
		icmpInParmProbs++;
		break;
	case ICMP_ECHO_REPLY:	/* Echo Reply */
		icmpInEchoReps++;
		echo_proc(ip->source,ip->dest,&icmp,bpp);
		break;
	case ICMP_TIMESTAMP:	/* Timestamp */
		icmpInTimestamps++;
		break;
	case ICMP_TIME_REPLY:	/* Timestamp Reply */
		icmpInTimestampReps++;
		break;
	case ICMP_INFO_RQST:	/* Information Request */
		break;
	case ICMP_INFO_REPLY:	/* Information Reply */
		break;
	}
	free_p(bpp);
}
/* Return an ICMP response to the sender of a datagram.
 * Unlike most routines, the callER frees the mbuf.
 */
int
icmp_output(
struct ip *ip,		/* Header of offending datagram */
struct mbuf *data,	/* Data portion of datagram - FREED BY CALLER */
uint8 type,		/* Codes to send */
uint8 code,
union icmp_args *args
){
	struct mbuf *bp;
	struct icmp icmp;	/* ICMP protocol header */
	uint16 dlen;		/* Length of data portion of offending pkt */
	uint16 length;		/* Total length of reply */

	if(ip == NULL)
		return -1;
	if(ip->protocol == ICMP_PTCL){
		/* Peek at type field of ICMP header to see if it's safe to
		 * return an ICMP message
		 */
		switch(data->data[0]){
		case ICMP_ECHO_REPLY:
		case ICMP_ECHO:
		case ICMP_TIMESTAMP:
		case ICMP_TIME_REPLY:
		case ICMP_INFO_RQST:
		case ICMP_INFO_REPLY:
			break;	/* These are all safe */
		default:
			/* Never send an ICMP error message about another
			 * ICMP error message!
			 */
			return -1;
		}
	}
	/* Compute amount of original datagram to return.
	 * We return the original IP header, and up to 8 bytes past that.
	 */
	dlen = min(8,len_p(data));
	length = dlen + ICMPLEN + IPLEN + ip->optlen;
	/* Take excerpt from data portion */
	if(data != NULL && dup_p(&bp,data,0,dlen) == 0)
		return -1;	/* The caller will free data */

	/* Recreate and tack on offending IP header */
	htonip(ip,&bp,IP_CS_NEW);
	icmp.type = type;
	icmp.code = code;
	icmp.args.unused = 0;
	switch(icmp.type){
	case ICMP_PARAM_PROB:
		icmpOutParmProbs++;
		icmp.args.pointer = args->pointer;
		break;
	case ICMP_REDIRECT:
		icmpOutRedirects++;
		icmp.args.address = args->address;
		break;
	case ICMP_ECHO:
		icmpOutEchos++;
		break;
	case ICMP_ECHO_REPLY:
		icmpOutEchoReps++;
		break;
	case ICMP_INFO_RQST:
		break;
	case ICMP_INFO_REPLY:
		break;
	case ICMP_TIMESTAMP:
		icmpOutTimestamps++;
		break;
	case ICMP_TIME_REPLY:
		icmpOutTimestampReps++;
		icmp.args.echo.id = args->echo.id;
		icmp.args.echo.seq = args->echo.seq;
		break;
	case ICMP_ADDR_MASK:
		icmpOutAddrMasks++;
		break;
	case ICMP_ADDR_MASK_REPLY:
		icmpOutAddrMaskReps++;
		break;
	case ICMP_DEST_UNREACH:
		if(icmp.code == ICMP_FRAG_NEEDED)
			icmp.args.mtu = args->mtu;
		icmpOutDestUnreachs++;
		break;
	case ICMP_TIME_EXCEED:
		icmpOutTimeExcds++;
		break;
	case ICMP_QUENCH:
		icmpOutSrcQuenchs++;
		break;
	}
	icmpOutMsgs++;
	/* Now stick on the ICMP header */
	htonicmp(&icmp,&bp);
	return ip_send(INADDR_ANY,ip->source,ICMP_PTCL,ip->tos,0,&bp,length,0,0);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区二区三区国产精华| 另类小说色综合网站| 天使萌一区二区三区免费观看| 麻豆中文一区二区| 99久久er热在这里只有精品66| 在线不卡免费av| 亚洲欧洲一区二区在线播放| 麻豆精品在线视频| 日本道色综合久久| 久久久不卡影院| 久久av资源网| 欧美日韩精品久久久| 国产精品素人一区二区| 免费精品视频最新在线| 色综合色综合色综合| 欧美极品xxx| 日韩va亚洲va欧美va久久| 99久久精品免费精品国产| 久久久精品天堂| 美女久久久精品| 在线综合视频播放| 一区二区成人在线观看| 99精品热视频| 1区2区3区国产精品| 国产iv一区二区三区| 日韩欧美亚洲另类制服综合在线| 亚洲电影在线播放| 一本一道综合狠狠老| 国产欧美日韩不卡| 国产风韵犹存在线视精品| 欧美xxxx在线观看| 国产夫妻精品视频| 国产亚洲综合av| 国产一区二区久久| 久久精品夜色噜噜亚洲a∨| 精品一区二区综合| 久久久久久免费毛片精品| 激情亚洲综合在线| 久久久99精品免费观看| 国产美女精品人人做人人爽| 久久精品一区二区三区不卡牛牛| 国内精品伊人久久久久av影院 | 国产精品每日更新在线播放网址| 国产曰批免费观看久久久| 精品成人在线观看| 激情文学综合网| 久久久国产一区二区三区四区小说| 狠狠色丁香久久婷婷综合_中| 精品国产免费久久| 国产成人亚洲综合a∨婷婷图片| 久久久久国产成人精品亚洲午夜 | 精品少妇一区二区三区日产乱码| 青青草伊人久久| 久久综合久久综合久久综合| 国产麻豆精品在线观看| 欧美高清在线一区| 色欧美88888久久久久久影院| 亚洲精品成人少妇| 9191国产精品| 国产精品一区二区久激情瑜伽| 欧美极品美女视频| 欧美在线看片a免费观看| 免费观看在线色综合| 久久久夜色精品亚洲| 色综合久久天天| 日韩精品一级二级| 久久久精品免费免费| 在线观看亚洲精品视频| 久久精品国产久精国产爱| 中文子幕无线码一区tr| 欧美日韩在线不卡| 国产呦精品一区二区三区网站| 亚洲免费伊人电影| 日韩免费观看高清完整版| av中文字幕不卡| 日本欧美肥老太交大片| 国产精品女人毛片| 在线电影一区二区三区| 成人看片黄a免费看在线| 亚洲成人精品在线观看| 欧美国产日产图区| 欧美精选在线播放| hitomi一区二区三区精品| 日韩专区欧美专区| 中文字幕一区二区三区乱码在线| 欧洲一区在线观看| 国产成人综合亚洲91猫咪| 亚洲一区二区三区四区在线| 国产日韩欧美不卡在线| 欧美肥妇bbw| 欧美亚洲丝袜传媒另类| 国产精品99久久不卡二区| 午夜欧美电影在线观看| 国产精品二三区| 欧美精品一区二区高清在线观看| 色婷婷亚洲综合| 风间由美一区二区三区在线观看 | 久久99精品久久久久久久久久久久| 亚洲视频香蕉人妖| 久久久久久久久99精品| 日韩精品一区二区三区在线观看| 欧美日韩中字一区| 91高清视频在线| 91在线观看美女| 国产精品系列在线播放| 九九久久精品视频 | 一区二区三区四区中文字幕| 久久久美女毛片| 亚洲精品在线三区| 日韩午夜激情av| 91精品国产麻豆国产自产在线| 欧美三级日韩三级| 欧美亚洲国产怡红院影院| 色拍拍在线精品视频8848| aaa国产一区| 国产69精品久久久久毛片| 黄色日韩三级电影| 国内成人免费视频| 国产尤物一区二区| 舔着乳尖日韩一区| 日本最新不卡在线| 午夜激情一区二区三区| 偷偷要91色婷婷| 婷婷夜色潮精品综合在线| 亚洲一卡二卡三卡四卡无卡久久| 亚洲免费av观看| 一区二区三区视频在线看| 一区二区三区不卡视频| 一区二区三区高清不卡| 亚洲成人1区2区| 日韩av一区二区在线影视| 久久激五月天综合精品| 韩国一区二区三区| 白白色亚洲国产精品| 色综合欧美在线| 欧美日韩一级黄| 日韩女优毛片在线| 国产欧美一区二区精品秋霞影院| 欧美国产日韩精品免费观看| 亚洲三级久久久| 亚洲午夜久久久| 久久精品国产色蜜蜜麻豆| 国产一区二区三区在线看麻豆| 国产成人三级在线观看| 色婷婷综合激情| 日韩小视频在线观看专区| 国产欧美一区二区精品性色超碰 | 国产成人综合在线播放| 99精品视频免费在线观看| 欧美理论电影在线| 久久免费美女视频| 综合中文字幕亚洲| 秋霞午夜鲁丝一区二区老狼| 国产成人免费av在线| 欧美在线看片a免费观看| 日韩欧美国产三级| 亚洲天堂成人在线观看| 免费三级欧美电影| 91欧美激情一区二区三区成人| 91精品欧美久久久久久动漫| 石原莉奈在线亚洲三区| 国产福利91精品一区| 欧美欧美欧美欧美首页| 欧美激情综合网| 亚洲成a人v欧美综合天堂下载| 国产乱码一区二区三区| 欧美三级在线看| 国产人伦精品一区二区| 亚洲大片在线观看| 丁香五精品蜜臀久久久久99网站| 欧洲一区二区三区在线| 国产欧美精品区一区二区三区| 亚洲观看高清完整版在线观看| 国产91精品免费| 欧美一区二区视频在线观看2020| 国产精品毛片a∨一区二区三区 | 欧美高清精品3d| 国产精品久久久久婷婷| 久久国产精品色婷婷| 欧美久久一二区| 亚洲图片有声小说| av在线不卡观看免费观看| 久久综合精品国产一区二区三区| 亚洲成年人网站在线观看| 99re8在线精品视频免费播放| 2021国产精品久久精品| 日韩成人午夜电影| 欧美少妇一区二区| 亚洲丝袜美腿综合| 国产.欧美.日韩| 久久综合久久综合久久| 久久精品免费看| 日韩欧美123| 卡一卡二国产精品| 日韩欧美一级二级三级久久久| 天天操天天色综合| 欧美日韩国产小视频| 亚洲最新视频在线播放| 一本大道久久精品懂色aⅴ| 国产精品久久久久久久蜜臀|