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

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

?? hop.c

?? 這是新華龍(www.xhl.xom.xn)開發(fā)的
?? C
字號(hào):

#include <stdio.h>
#include <string.h>
#include "global.h"
#include "mbuf.h"
#include "usock.h"
#include "socket.h"
#include "session.h"
#include "timer.h"
#include "proc.h"
#include "netuser.h"
#include "domain.h"
#include "commands.h"
#include "tty.h"
#include "cmdparse.h"
#include "ip.h"
#include "icmp.h"
#include "udp.h"
#include "hardware.h"

#define HOPMAXQUERY	5		/* Max# queries each TTL value */
static uint16 Hoprport = 32768+666;	/* funny port for udp probes */
#define HOP_HIGHBIT	32768		/* Mask to check ICMP msgs */


#define HOPTRACE	1		/* Enable HOP tracing */
#ifdef HOPTRACE
static int Hoptrace = 0;
static int hoptrace(int argc,char *argv[],void *p);
#endif


static unsigned  short Hopmaxttl  = 30;		/* max attempts */
static unsigned  short Hopmaxwait = 5;		/* secs timeout each attempt */
static unsigned  short Hopquery   = 3;		/* #probes each attempt */

static int hopcheck(int argc,char *argv[],void *p);
static int hopttl(int argc,char *argv[],void *p);
static int hokwait(int argc,char *argv[],void *p);
static int hopnum(int argc,char *argv[],void *p);
static int geticmp(int s,uint16 lport,uint16 fport,
	int32 *sender,char *type,char *code);
static int keychar(int c);

static struct cmds Hopcmds[] = {
	"check",	hopcheck,	2048,	2,	"check <host>",
	"maxttl",	hopttl,		0,	0,	NULL,
	"maxwait",	hokwait,	0,	0,	NULL,
	"queries",	hopnum,		0,	0,	NULL,
#ifdef HOPTRACE
	"trace",	hoptrace,	0,	0,	NULL,
#endif
	NULL,
};

/* attempt to trace route to a remote host */
int
dohop(argc,argv,p)
int argc;
char *argv[];
void *p;
{
	return subcmd(Hopcmds,argc,argv,p);
}

/* Set/show # queries sent each TTL value */
static int
hopnum(argc,argv,p)
int argc;
char *argv[];
void *p;
{
	uint16 r;
	uint16 x = Hopquery;
	r = setshort(&x,"# queries each attempt",argc,argv);
	if ((x <= 0)||(x > HOPMAXQUERY)) {
		printf("Must be  0 < x <= %d\n",HOPMAXQUERY);
		return 0;
	} else {
		Hopquery = x;
	}
    return (int)r;
}
#ifdef HOPTRACE
/* Set/show tracelevel */
static int
hoptrace(argc,argv,p)
int argc;
char *argv[];
void *p;
{
	return setbool(&Hoptrace,"HOPCHECK tracing",argc,argv);
}
#endif
/* Set/show maximum TTL value for a traceroute query */
static int
hopttl(argc,argv,p)
int argc;
char *argv[];
void *p;
{
	uint16 r;
	uint16 x = Hopmaxttl;
	r = setshort(&x,"Max attempts to reach host",argc,argv);
	if ((x <= 0)||(x > 255)) {
		printf("Must be  0 < x <= 255\n");
		return 0;
	} else {
		Hopmaxttl = x;
	}
    return (int)r;
}
/* Set/show #secs until timeout for a traceroute query */
static int
hokwait(argc,argv,p)
int argc;
char *argv[];
void *p;
{
	uint16 r;
	uint16 x = Hopmaxwait;
	r = setshort(&x,"# secs to wait for reply to query",argc,argv);
	if (x <= 0) {
		printf("Must be >= 0\n");
		return 0;
	} else {
		Hopmaxwait = x;
	}
    return (int)r;
}

/* send probes to trace route of a remote host */
static int
hopcheck(argc,argv,p)
int argc;
char *argv[];
void *p;
{
	struct session *sp;		/* Session for trace output */
	int s;				/* Socket for queries */
	int s1;				/* Raw socket for replies */
	struct socket lsocket;		/* Local socket sending queries */
	struct socket rsocket;		/* Final destination of queries */
	int32 cticks;			/* Timer for query replies */
	int32 icsource;			/* Sender of last ICMP reply */
	char ictype;			/* ICMP type last ICMP reply */
	char iccode;			/* ICMP code last ICMP reply */
	int32 lastaddr;			/* Sender of previous ICMP reply */
	struct sockaddr_in sock;
	register struct usock *usp;
	register struct sockaddr_in *sinp;
	unsigned char sndttl, q;
	int tracedone = 0;
	int ilookup = 1;		/* Control of inverse domain lookup */
	int c;
	extern int optind;
	char *hostname;
	int save_trace;
	int user_reset = 0;

	optind = 1;
	while((c = getopt(argc,argv,"n")) != EOF){
		switch(c){
		case 'n':
			ilookup = 0;
			break;
		}
	}
	hostname = argv[optind];
	/* Allocate a session descriptor */
	if((sp = newsession(Cmdline,HOP,1)) == NULL){
		printf("Too many sessions\n");
		keywait(NULL,1);
		return 1;
	}
	sp->inproc = keychar;
	s = -1;

	/* Setup UDP socket to remote host */
	sock.sin_family = AF_INET;
	sock.sin_port = Hoprport;
	printf("Resolving %s... ",hostname);
	if((sock.sin_addr.s_addr = resolve(hostname)) == 0){
		printf("unknown\n",hostname);
		keywait(NULL,1);
		freesession(sp);
		return 1;
	}

	/* Open socket to remote host */
	printf("%s ",psocket((struct sockaddr *)&sock));
	if((s = socket(AF_INET,SOCK_DGRAM,0)) == -1){
		printf("Can't create udp socket\n");
		keywait(NULL,1);
		freesession(sp);
		return 1;
	}
	if(connect(s,(struct sockaddr *)&sock,sizeof(sock)) == -1){
		printf("Connect failed\n");
		keywait(NULL,1);
		freesession(sp);
		return 1;
	}
	if((s1 = socket(AF_INET,SOCK_RAW,ICMP_PTCL)) == -1){
		printf("Can't create raw socket\n");
		keywait(NULL,1);
		close(s);
		freesession(sp);
		return 1;
	}
	printf("\n");
	/* turn off icmp tracing while hop-checking */
	save_trace = Icmp_trace;
	Icmp_trace = 0;

	/* Setup structures to send queries */
	/* Retrieve socket details for user socket control block */
	usp = itop(s);
	sinp = (struct sockaddr_in *)usp->name;
	lsocket.address = sinp->sin_addr.s_addr;
	lsocket.port = sinp->sin_port;
	sinp = (struct sockaddr_in *)usp->peername;
	rsocket.address = sinp->sin_addr.s_addr;

	/* Send queries with increasing TTL; start with TTL=1 */
	if (Hoptrace)
		logmsg(s,"HOPCHECK start trace to %s\n",sp->name);
	for (sndttl=1; (sndttl < Hopmaxttl); ++sndttl, sinp->sin_port++) {
		/* Increment funny UDP port number each round */
		rsocket.port = sinp->sin_port;
		printf("%3d:",sndttl);
		lastaddr = (int32)0;
		/* Send a round of queries */
		for (q=0; (q < Hopquery); ++q) {
			struct mbuf *bp;
			bp = ambufw(0);
			send_udp(&lsocket,&rsocket,0,sndttl,&bp,0,0,0);
			cticks = msclock();
			kalarm( ((long)Hopmaxwait*1000L) );

			/* Wait for a reply to our query */
			if(geticmp(s1,lsocket.port,rsocket.port,
			 &icsource,&ictype,&iccode) == -1){
				if(errno != EALARM){
					user_reset = 1;
					goto done;	/* User reset */
				}
				/* Alarm rang, give up waiting for replies */
				printf(" ***");
				continue;
			}
			/* Save #ticks taken for reply */
                        cticks = msclock() - cticks;
			/* Report ICMP reply */
			if (icsource != lastaddr) {
				struct rr *save_rrlp, *rrlp;

				if(lastaddr != (int32)0)
					printf("\n    ");
				printf(" %-15s",inet_ntoa(icsource));
				if(ilookup){
					for(rrlp = save_rrlp = inverse_a(icsource);
					    rrlp != NULL;
					    rrlp = rrlp->next){
						if(rrlp->rdlength > 0){
							switch(rrlp->type){
							case TYPE_PTR:
								printf(" %s", rrlp->rdata.name);
								goto got_name;
							case TYPE_A:
								printf(" %s", rrlp->name);
								goto got_name;
							}
#ifdef notdef
							if(rrlp->next != NULL)
								printf("\n%20s"," ");
#endif
						}
					}
					got_name: ;
					free_rr(save_rrlp);

				}
				lastaddr = icsource;
			}
                        printf(" (%ld ms)",cticks);
#ifdef HOPTRACE
			if (Hoptrace)
				logmsg(s,
				    "(hopcheck) ICMP from %s (%ldms) %s %s",
				    inet_ntoa(icsource),
				    cticks,
				    Icmptypes[ictype],
				    ((ictype == ICMP_TIME_EXCEED)?Exceed[iccode]:Unreach[iccode]));
#endif

			/* Check type of reply */
			if (ictype == ICMP_TIME_EXCEED)
				continue;
			/* Reply was: destination unreachable */
			switch(iccode) {
			case ICMP_PORT_UNREACH:
				++tracedone;
				break;
			case ICMP_NET_UNREACH:
				++tracedone;
				printf(" !N");
				break;
			case ICMP_HOST_UNREACH:
				++tracedone;
				printf(" !H");
				break;
			case ICMP_PROT_UNREACH:
				++tracedone;
				printf(" !P");
				break;
			case ICMP_FRAG_NEEDED:
				++tracedone;
				printf(" !F");
				break;
			case ICMP_ROUTE_FAIL:
				++tracedone;
				printf(" !S");
				break;
                        case ICMP_ADMIN_PROHIB:
                                ++tracedone;
                                printf(" !A");
                                break;
                        default:
                                printf(" !?");
                                break;
			}
		}
		/* Done with this round of queries */
		kalarm((long)0);
		printf("\n");
		/* Check if we reached remote host this round */
		if (tracedone != 0)
			break;
	}

	/* Done with traceroute */
done:	close(s);
	s = -1;
	close(s1);
	if(user_reset)
		printf("\n");	/* May have been in middle of line */
	printf("traceroute done: ");
	Icmp_trace = save_trace;
	if(user_reset){
		printf("user abort\n");
	} else if (sndttl >= Hopmaxttl) {
		printf("!! maximum TTL exceeded\n");
	} else if ((icsource == rsocket.address)
		    &&(iccode == ICMP_PORT_UNREACH)) {
		printf("normal (%s %s)\n",
			Icmptypes[ictype],Unreach[iccode]);
	} else {
		printf("!! %s %s\n",
			Icmptypes[ictype],Unreach[iccode]);
	}
#ifdef HOPTRACE
	if (Hoptrace)
		logmsg(s,"HOPCHECK to %s done",sp->name);
#endif
	keywait(NULL,1);
	freesession(sp);
	return 0;
}

/* Hop check session keyboard upcall routine -- handles ^C */
static int
keychar(c)
int c;
{
	switch(c){
	case CTLC:
		alert(Current->proc,EABORT);
		return 0;
	}
	return 1;
}

/* Read raw network socket looking for ICMP messages in response to our
 * UDP probes
 */
static int
geticmp(s,lport,fport,sender,type,code)
int s;
uint16 lport;
uint16 fport;
int32 *sender;
char *type,*code;
{
	int size;
	struct icmp icmphdr;
	struct ip iphdr;
	struct udp udphdr;
	struct mbuf *bp;
	struct sockaddr_in sock;

	for(;;){
		size = sizeof(sock);
		if(recv_mbuf(s,&bp,0,(struct sockaddr *)&sock,&size) == -1)
			return -1;
		/* It's an ICMP message, let's see if it's interesting */
		ntohicmp(&icmphdr,&bp);
		if((icmphdr.type != ICMP_TIME_EXCEED ||
		 icmphdr.code != ICMP_TTL_EXCEED)
		 && icmphdr.type != ICMP_DEST_UNREACH){
			/* We're not interested in these */
			free_p(&bp);
			continue;
		}
		ntohip(&iphdr,&bp);
		if(iphdr.protocol != UDP_PTCL){
			/* Not UDP, so can't be interesting */
			free_p(&bp);
			continue;
		}
		ntohudp(&udphdr,&bp);
		if(udphdr.dest != fport || udphdr.source != lport){
			/* Not from our hopcheck session */
			free_p(&bp);
			continue;
		}
		/* Passed all of our checks, so return it */
		*sender = sock.sin_addr.s_addr;
		*type = icmphdr.type;
		*code = icmphdr.code;
		free_p(&bp);
		return 0;
	}
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久成人免费网| 欧洲一区二区av| 亚洲午夜国产一区99re久久| 宅男噜噜噜66一区二区66| 国产精品一二二区| 亚洲福利一区二区三区| 国产精品国产三级国产a| 欧美精品aⅴ在线视频| 成人免费高清视频| 精品亚洲aⅴ乱码一区二区三区| 亚洲欧美另类久久久精品2019| 欧美va亚洲va香蕉在线| 欧美日韩一二三区| 91亚洲国产成人精品一区二区三| 久久疯狂做爰流白浆xx| 亚洲成人免费在线| 一区二区三区四区高清精品免费观看| 久久久久久久久久久久久女国产乱| 欧美日韩色一区| 色综合中文综合网| 在线区一区二视频| 国产福利91精品一区二区三区| 亚洲777理论| 亚洲一区二区三区四区在线观看 | 国产盗摄女厕一区二区三区 | av午夜一区麻豆| 国产精品中文字幕日韩精品| 五月天激情综合| 亚洲欧洲综合另类| 国产精品理伦片| 国产日本亚洲高清| 久久精品在线观看| 久久久五月婷婷| 久久影音资源网| 精品国产三级电影在线观看| 91精品中文字幕一区二区三区| 91国偷自产一区二区三区成为亚洲经典| 粉嫩蜜臀av国产精品网站| 激情久久五月天| 国产一区二区三区不卡在线观看 | 国产精品全国免费观看高清| 久久久久久日产精品| 久久综合久久鬼色| 国产午夜精品美女毛片视频| 久久男人中文字幕资源站| 久久夜色精品国产欧美乱极品| 欧美草草影院在线视频| 欧美成人a视频| 久久亚洲精品小早川怜子| 久久天堂av综合合色蜜桃网| 久久久亚洲高清| 国产精品每日更新在线播放网址| 国产精品乱码久久久久久| 中文字幕日本乱码精品影院| 亚洲日本乱码在线观看| 亚洲激情六月丁香| 日韩电影在线观看网站| 精品一区二区三区的国产在线播放| 久久国产精品无码网站| 国产另类ts人妖一区二区| 国产91丝袜在线播放| 色婷婷综合五月| 91麻豆精品国产91久久久久久久久| 欧美一二三四在线| 中文字幕第一页久久| 一区二区三区在线高清| 美女一区二区久久| 成人av中文字幕| 欧美日韩视频专区在线播放| 日韩免费观看高清完整版| 久久久www成人免费无遮挡大片 | 丝袜亚洲精品中文字幕一区| 美女一区二区久久| 成人激情图片网| 欧美色精品在线视频| 日韩欧美久久久| 国产精品免费网站在线观看| 一区二区三区精品视频在线| 免费观看日韩av| 成人av在线播放网站| 欧美日韩精品一区二区在线播放| 欧美mv和日韩mv的网站| 亚洲精品菠萝久久久久久久| 美美哒免费高清在线观看视频一区二区 | 蜜臂av日日欢夜夜爽一区| 国产盗摄一区二区三区| 精品视频一区 二区 三区| 久久久国际精品| 亚洲成a人在线观看| 国产一区二区在线免费观看| 在线观看亚洲一区| 久久久精品中文字幕麻豆发布| 亚洲一区二区三区三| 风流少妇一区二区| 欧美精品第1页| 亚洲情趣在线观看| 国产一区 二区| 欧美高清视频不卡网| 18成人在线观看| 国产成人在线视频网址| 欧美一区二区三区日韩视频| 亚洲黄色在线视频| 高清在线成人网| 日韩久久免费av| 亚洲伊人伊色伊影伊综合网 | 欧美精品v日韩精品v韩国精品v| 国产欧美日韩在线观看| 久久激情五月婷婷| 欧美日韩一区二区电影| 亚洲日本在线天堂| 国产.精品.日韩.另类.中文.在线.播放| 欧美日韩一区二区在线观看| 亚洲图片激情小说| 成人福利在线看| 久久久精品tv| 国产在线精品一区二区三区不卡| 欧美日韩中文字幕精品| 一区二区三区色| 99久久精品久久久久久清纯| 久久久激情视频| 韩国精品在线观看| 日韩美一区二区三区| 午夜一区二区三区在线观看| 色婷婷国产精品| 亚洲视频香蕉人妖| 99久久婷婷国产| 国产精品久久三| 成人免费va视频| 中文字幕乱码日本亚洲一区二区| 久久69国产一区二区蜜臀| 日韩精品一区二区三区在线| 日韩精品一二三| 欧美日本韩国一区| 五月婷婷激情综合网| 3d动漫精品啪啪| 日本亚洲最大的色成网站www| 欧美人与禽zozo性伦| 首页国产丝袜综合| 91精品国产一区二区人妖| 日韩精品一级中文字幕精品视频免费观看 | 欧美专区亚洲专区| 亚洲电影你懂得| 欧美日本韩国一区二区三区视频| 亚洲一二三区在线观看| 欧美色图片你懂的| 丝袜美腿成人在线| 精品对白一区国产伦| 国产精品一二三| 中文字幕制服丝袜成人av| 91丨九色丨蝌蚪丨老版| 亚洲综合视频网| 欧美日韩久久一区二区| 免费在线欧美视频| 久久久91精品国产一区二区三区| 国产高清不卡二三区| 中文字幕一区三区| 欧美日韩一区二区三区不卡 | 蜜桃一区二区三区四区| 久久亚洲影视婷婷| av在线播放成人| 亚洲国产精品综合小说图片区| 欧美伦理电影网| 国模娜娜一区二区三区| 中文字幕欧美激情一区| 欧美在线免费播放| 免费成人在线观看视频| 国产日本欧洲亚洲| 欧美视频在线一区| 久久 天天综合| 亚洲免费视频中文字幕| 91麻豆精品国产91久久久久久| 国产一区二区中文字幕| 亚洲自拍偷拍图区| 亚洲精品一线二线三线无人区| 成人福利视频网站| 奇米色777欧美一区二区| 欧美激情综合五月色丁香 | 中文字幕免费观看一区| 欧美性生活影院| 国产激情视频一区二区三区欧美 | 色爱区综合激月婷婷| 奇米色一区二区| 自拍偷拍亚洲欧美日韩| 日韩西西人体444www| 97精品国产露脸对白| 久久国产尿小便嘘嘘尿| 一区二区激情视频| 久久九九影视网| 91精品免费观看| 99国产精品久久久| 精品写真视频在线观看| 亚洲国产视频一区二区| 国产午夜精品一区二区三区嫩草| 国产精品色呦呦| 日韩免费观看高清完整版| 91高清在线观看| 成人一区二区视频| 韩国女主播一区| 免费的成人av| 亚洲国产日日夜夜|