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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? pcicmp.c

?? dos 下 網(wǎng)絡(luò)協(xié)議 dos 下 網(wǎng)絡(luò)協(xié)議
?? C
字號:
#include <copyright.h>
#include <wattcp.h>
#include <mem.h>
#include <dos.h>

/*
 * ICMP - RFC 792 & 1122
 */

static char *unreach[] = {
	"Network Unreachable",
	"Host Unreachable",
	"Protocol Unreachable",
	"Port Unreachable",
	// R. Whitby
	"Fragmentation Needed and DF set",
	"Source Route Failed",
	"Destination Network Unknown",
	"Destination Host Unknown",
	"Source Host Isolated",
	"Destination Network Prohibited",
	"Destination Host Prohibited",
	"Network TOS Unreachable",
	"Host TOS Unreachable" };

static char *exceed[] = {
	// R. Whitby
	"TTL Exceeded in Transit",
	"Fragment Reassembly Time Exceeded" };

static char *redirect[] = {
	"Redirect for Network",
	"Redirect for Host",
	"Redirect for TOS and Network",
	"Redirect for TOS and Host" };

/* constants */

#include <icmp.h>

// R. Whitby
extern void (*_dbugxmit)( sock_type *s, in_Header *inp, void *phdr,
	     unsigned line );
extern void (*_dbugrecv)( sock_type *s, in_Header *inp, void *phdr,
	     unsigned line );

static word icmp_id = 0;

static longword ping_hcache = 0;	/* host */
static longword ping_tcache = 0;	/* time */
static longword ping_number = 0;
extern word multihomes;

/* handler called in icmp_handler if this isn't null */
static icmp_handler_type user_icmp_handler = NULL;

longword _chk_ping( longword host, longword *ptr )
{
    if ( ping_hcache == host ) {
	ping_hcache = 0xffffffffL;
	*ptr = ping_number;
	return( ping_tcache );
    }
    return( 0xffffffffL );
}

static void icmp_print( icmp_pkt *icmp, char *msg )
{
icmp=icmp;     // get rid of warning
//    outs("\n\rICMP: ");
//    outs( msg );
//    outs("\n\r");
}

#ifdef NOTUSED		// R. Whitby
/*
 *
 */
static struct _pkt *icmp_Format( longword destip )
{
    eth_address dest;
/*    char *temp; */

    /* we use arp rather than supplied hardware address */
    /* after first ping this will still be in cache */

    if ( !_arp_resolve( destip , &dest, 0 ))
	return( NULL );				/* unable to find address */
    return( (struct _pkt*)_eth_formatpacket( &dest, 8 ));    /* &dest okay? */
}
#endif 			// R. Whitby

/*
 * icmp_Reply - format and send a reply packet
 *  	      - note that src and dest are NETWORK order not host!!!!
 */
static void icmp_Reply( struct _pkt *p, longword src, longword dest, int icmp_length )
{
    in_Header *ip;
    icmp_pkt *icmp;

    ip = &p->in;
    memset( ip, 0, sizeof( in_Header ));
    icmp = &p->icmp;

    /* finish the icmp checksum portion */
    icmp->unused.checksum = 0;
    icmp->unused.checksum = ~checksum( icmp, icmp_length );

    /* encapsulate into a nice ip packet */
    ip->ver = 4;
    ip->hdrlen = 5;
    ip->length = intel16( sizeof( in_Header ) + icmp_length);
    ip->tos = 0;
    ip->identification = intel16( icmp_id ++);	/* not using ip id */
//    ip->frag = 0;
    ip->ttl = 250;
    ip->proto = ICMP_PROTO;
    ip->checksum = 0;
    ip->source = src;
    ip->destination = dest;
    ip->checksum = ~ checksum( ip, sizeof( in_Header ));

    if (_dbugxmit) (*_dbugxmit)( NULL, ip, icmp, 0);	// R. Whitby

    _eth_send( intel16( ip->length ));
}

// S. Lawson - send ICMP port unreachable
void icmp_Unreach(in_Header *ip) {
    icmp_pkt *icmp;
    struct _pkt *pkt;
    word len;

    len = in_GetHdrlenBytes(ip)+8;
    pkt = (struct _pkt*)(_eth_formatpacket( _eth_hardware((byte*)ip), 8));
    icmp = &pkt->icmp;
    icmp->unused.type = ICMPTYPE_UNREACHABLE;
    icmp->unused.code = ICMP_UNREACH_PORT;
    icmp->unused.unused = 0L;
    movmem(ip, &icmp->unused.ip, len);
    icmp_Reply( pkt,ip->destination, ip->source, 8+len );
}

// S. Lawson - BC 2.0 doesn't have the underscore variety
#ifndef _disable
#define _disable disable
#define _enable enable
#endif

/*
 * Register the user ICMP handler.  Only one at a time...
 * To disable user handler, call  set_icmp_handler(NULL);
 */
void set_icmp_handler( icmp_handler_type user_handler )
{
   _disable();
   user_icmp_handler = user_handler;
   _enable();
}

int icmp_handler( in_Header *ip )
{
    icmp_pkt *icmp, *newicmp;
    struct _pkt *pkt;
    int len, code;
    in_Header *ret;

    len = in_GetHdrlenBytes( ip );
    icmp = (icmp_pkt*)((byte *)ip + len);

    if (_dbugrecv) (*_dbugrecv)( NULL, ip, icmp, 0);	// R. Whitby

    len = intel16( ip->length ) - len;
    if ( checksum( icmp, len ) != 0xffff ) {
// R. Whitby	outs("ICMP received with bad checksum\n\r");
	if (debug_on > 0) icmp_print(icmp, "Bad Checksum");  // R. Whitby
	return( 1 );
    }

   /*
    * If there's a user handler installed, call the user's handler;
    *     return of anything but 0 and this handler will continue
    *     processing the message after the user is done with it.
    * Otherwise, stop processing it now.
    */
    if( user_icmp_handler )
    {
	if( (user_icmp_handler)( ip ) == 0 )   /* don't continue processing? */
		return( 1 );
    }

    code = icmp->unused.code;
    ret = & (icmp->ip.ip);

    switch ( icmp->unused.type) {
	case 0 : /* icmp echo reply received */
		/* icmp_print( icmp, "received icmp echo receipt"); */

		if (debug_on > 0) icmp_print( icmp, "Echo Reply");  // R. Whitby

		/* check if we were waiting for it */
		ping_hcache = intel( ip->source );
		ping_tcache = set_timeout( 1 ) - *(longword *)(&icmp->echo.identifier );
		if (ping_tcache > 0xffffffffL)
		    ping_tcache += 0x1800b0L;
		ping_number = *(longword*)( ((byte*)(&icmp->echo.identifier)) + 4 );
		/* do more */
		break;

	case 3 : /* destination unreachable message */
// R. Whitby		if (code < 6) {
		if (code < 13) { 		// R. Whitby
		    icmp_print( icmp, unreach[ code ]);

		    /* handle udp or tcp socket */
		    if (ret->proto == TCP_PROTO)
			_tcp_cancel( ret, 1, unreach[ code ], 0 );
		    if (ret->proto == UDP_PROTO)
			_udp_cancel( ret );
		}
		break;

	case 4  : /* source quench */
		if (debug_on > 0 ) icmp_print( icmp, "Source Quench");
		if (ret->proto == TCP_PROTO)
		    _tcp_cancel( ret, 2, NULL, 0 );
		break;

	case 5  : /* redirect */
		if (code < 4) {
		    if (ret->proto == TCP_PROTO)
			/* do it to some socket guy */
			_tcp_cancel( ret, 5, NULL, icmp->ip.ipaddr );

		    if (debug_on > 0 ) icmp_print( icmp, redirect[ code ]);
		}
		break;

	case 8  : /* icmp echo request */
		/* icmp_print( icmp, "PING requested of us"); */
		if (debug_on > 0) icmp_print( icmp, "Echo Request"); // R. Whitby

		// don't reply if the request was made by ourselves
		// such as a problem with Etherslip pktdrvr
                if  ( (longword) (intel(ip->destination) - my_ip_addr) > multihomes )
		    return( 1 );

		// do arp and create packet
		/* format the packet with the request's hardware address */
		pkt = (struct _pkt*)(_eth_formatpacket( _eth_hardware((byte*)ip), 8));

		newicmp = &pkt->icmp;

		movmem( icmp, newicmp, len );
		newicmp->echo.type = 0;
		newicmp->echo.code = code;

		/* use supplied ip values in case we ever multi-home */
		/* note that ip values are still in network order */
		icmp_Reply( pkt,ip->destination, ip->source, len );

		/* icmp_print( newicmp, "PING reply sent"); */

		break;

	case 11 : /* time exceeded message */
		if (code < 2 ) {
		    icmp_print( icmp, exceed[ code ]);
		    if ((ret->proto == TCP_PROTO) && (code != 1))
			_tcp_cancel( ret, 1, NULL, 0 );
		}
		break;

	case 12 : /* parameter problem message */
		icmp_print( icmp, "IP Parameter Problem");
		break;

	// R. Whitby - added debug_on test to remaining cases
	case 13 : /* timestamp message */
		if (debug_on > 0) icmp_print( icmp, "Timestamp Request");
		/* send reply */
		break;

	case 14 : /* timestamp reply */
		if (debug_on > 0) icmp_print( icmp, "Timestamp Reply");
		/* should store */
		break;

	case 15 : /* info request */
		if (debug_on > 0) icmp_print( icmp,"Info Request");
		/* send reply */
		break;

	case 16 : /* info reply */
		if (debug_on > 0) icmp_print( icmp,"Info Reply");
		break;

	// R. Whitby
	default : /* unknown */
		if (debug_on > 0) icmp_print( icmp,"Unknown Type");
		break;

    }
    return( 1 );
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久精品一区八戒影视| 亚洲va欧美va天堂v国产综合| 欧美在线视频全部完| 亚洲午夜免费福利视频| 欧美一区二区三区免费观看视频| 国产成人av一区二区三区在线| 午夜一区二区三区视频| 国产日韩精品一区二区浪潮av| 欧美亚洲免费在线一区| 国产黄色成人av| 麻豆精品国产传媒mv男同| 一级中文字幕一区二区| 国产精品理论在线观看| 精品国产sm最大网站免费看| 在线电影国产精品| 在线观看亚洲专区| 成人av在线资源网| 国产成人综合亚洲网站| 日韩激情视频网站| 一区二区三区欧美亚洲| 中文字幕亚洲综合久久菠萝蜜| 久久亚洲精品小早川怜子| 7777精品久久久大香线蕉| 色综合天天视频在线观看 | 亚洲一区二区高清| 欧美日韩一区二区欧美激情| 人人狠狠综合久久亚洲| 亚洲二区在线观看| 亚洲精品免费看| 国产精品视频免费看| 国产三区在线成人av| 久久一二三国产| 久久久久久夜精品精品免费| 26uuu国产在线精品一区二区| 日韩免费观看2025年上映的电影| 欧美丰满高潮xxxx喷水动漫| 欧美乱妇23p| 91麻豆精品国产91久久久 | 色狠狠色噜噜噜综合网| 色婷婷久久综合| 日本韩国欧美一区二区三区| 欧美在线短视频| 欧美精品三级日韩久久| 欧美精品久久一区二区三区| 7777精品伊人久久久大香线蕉经典版下载 | 欧美xxxxxxxx| 日韩午夜在线影院| 日韩精品一区二区三区在线播放 | 国产精品女同互慰在线看| 中文乱码免费一区二区| 中文字幕欧美一区| 亚洲综合视频网| 亚洲成av人片在线| 日韩avvvv在线播放| 奇米色一区二区| 国产呦精品一区二区三区网站| 国产一区二区在线视频| 国产精品综合av一区二区国产馆| 成人毛片在线观看| 91福利在线看| 欧美一区二区三区在线看| 欧美精品一区二区三| 国产精品丝袜久久久久久app| 亚洲精品乱码久久久久久久久| 亚洲一区在线免费观看| 日韩高清不卡在线| 国产精品自拍在线| 91国偷自产一区二区使用方法| 欧美一区二区三区性视频| 久久蜜臀中文字幕| 一区二区三区在线看| 日本不卡在线视频| 成人综合在线视频| 在线视频一区二区免费| 欧美一级片在线观看| 久久久不卡影院| 91香蕉视频在线| 欧美浪妇xxxx高跟鞋交| 精品成人一区二区三区四区| 中文字幕在线一区二区三区| 三级久久三级久久| 国产91露脸合集magnet| 色嗨嗨av一区二区三区| 日韩女优制服丝袜电影| 国产精品欧美一区二区三区| 日韩av二区在线播放| 99re成人在线| 欧美电影精品一区二区| 亚洲自拍偷拍av| 国产盗摄女厕一区二区三区| 欧美精品精品一区| 亚洲欧洲av色图| 韩国精品主播一区二区在线观看| 欧美最猛性xxxxx直播| 久久久av毛片精品| 午夜av电影一区| 99久久精品国产精品久久| 精品欧美乱码久久久久久| 亚洲一区二区三区小说| 成人一区二区视频| 日韩精品中午字幕| 亚洲一区二区在线观看视频 | 国产·精品毛片| 6080午夜不卡| 亚洲一区二区三区爽爽爽爽爽| 国产成人免费视频一区| 欧美一区二区在线看| 亚洲一区免费视频| www.成人网.com| 久久免费看少妇高潮| 老司机午夜精品| 91精品在线免费| 亚洲一区精品在线| 色综合一区二区三区| 国产嫩草影院久久久久| 激情欧美一区二区| 制服丝袜亚洲精品中文字幕| 亚洲在线中文字幕| 色美美综合视频| 一区二区中文字幕在线| 丰满白嫩尤物一区二区| 久久免费看少妇高潮| 精品一区二区三区蜜桃| 欧美一区二区三区视频免费 | www.一区二区| 国产亚洲欧洲一区高清在线观看| 美女一区二区在线观看| 欧美美女一区二区| 午夜久久久久久久久久一区二区| 欧美伊人久久大香线蕉综合69| 亚洲欧美日韩在线| 日本韩国欧美一区| 一级精品视频在线观看宜春院| 在线视频你懂得一区| 亚洲影视在线播放| 欧美日韩一区二区三区在线看 | 亚洲色图欧美激情| 色综合 综合色| 亚洲综合色在线| 欧美日韩大陆在线| 日韩电影在线观看电影| 欧美精品tushy高清| 麻豆免费精品视频| 精品国产乱码久久久久久久久| 精品一区二区三区免费| 久久精品人人做人人综合| 成人性生交大片免费看在线播放| 国产精品国产自产拍在线| 成a人片国产精品| 一区二区三区波多野结衣在线观看| 在线亚洲人成电影网站色www| 夜夜爽夜夜爽精品视频| 欧美老女人在线| 另类小说图片综合网| 亚洲精品一区二区三区影院| 国产精品一色哟哟哟| 国产精品久久久久影院老司| 91福利视频网站| 美女一区二区三区| 欧美国产乱子伦| 91国产丝袜在线播放| 免费高清成人在线| 国产无人区一区二区三区| 色哟哟一区二区| 理论电影国产精品| 欧美激情在线免费观看| 欧美午夜精品一区| 精品一区二区三区免费视频| 国产精品亲子伦对白| 欧美日韩1区2区| 国产福利一区二区三区视频| 亚洲免费av高清| 欧美一区二区三区免费视频| 成人性生交大片| 日韩中文字幕不卡| 国产日韩欧美综合在线| 欧美日韩午夜影院| 国产很黄免费观看久久| 亚洲妇女屁股眼交7| 国产日韩欧美制服另类| 欧美日韩国产小视频在线观看| 国产精品一级在线| 午夜免费久久看| 一区在线观看免费| 精品日韩一区二区| 欧美色老头old∨ideo| 国产精品综合一区二区| 亚洲va国产天堂va久久en| 精品av久久707| 在线精品视频免费观看| 国产99久久久国产精品| 午夜激情一区二区| 中文字幕日韩av资源站| 日韩美女一区二区三区| 欧美性猛片xxxx免费看久爱| 国产不卡一区视频| 美美哒免费高清在线观看视频一区二区| 中文字幕视频一区| 久久久99精品免费观看不卡| 欧美一区在线视频|