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

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

?? hop.c

?? TCPIP協(xié)議包
?? C
字號:

#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
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美亚男人的天堂| 一区二区三区精品在线观看| 99久久精品国产麻豆演员表| 午夜精品福利一区二区蜜股av| 久久久久99精品国产片| 666欧美在线视频| 91看片淫黄大片一级| 国产制服丝袜一区| 婷婷丁香激情综合| 日韩毛片视频在线看| 久久综合狠狠综合| 91精品国产综合久久精品| 一本一道久久a久久精品| 国产精品一区免费视频| 日本午夜一区二区| 婷婷国产v国产偷v亚洲高清| 亚洲精品伦理在线| 国产精品福利一区二区| 久久久.com| 精品久久久久久久人人人人传媒| 欧美日韩精品一区二区三区蜜桃| 9久草视频在线视频精品| 国产精品自拍毛片| 久久av中文字幕片| 日韩av网站在线观看| 午夜视频一区二区| 亚洲一区二区3| 亚洲一二三四区| 亚洲免费电影在线| 欧美日韩一级大片网址| 99国产欧美另类久久久精品| 成人动漫av在线| 丁香五精品蜜臀久久久久99网站| 国产精品综合网| 极品美女销魂一区二区三区免费| 日本色综合中文字幕| 婷婷丁香激情综合| 免费一级片91| 蜜臀av性久久久久蜜臀aⅴ| 午夜av电影一区| 日韩黄色片在线观看| 日本成人在线视频网站| 免费不卡在线视频| 久久精品国产精品亚洲精品| 国内精品久久久久影院一蜜桃| 久久av资源站| 国产成人综合在线| 丁香天五香天堂综合| 99精品偷自拍| 欧洲av一区二区嗯嗯嗯啊| 欧美私人免费视频| 91精品在线观看入口| 精品国一区二区三区| 国产欧美一二三区| 亚洲欧洲韩国日本视频| 一区二区三区鲁丝不卡| 日韩激情在线观看| 国产一区三区三区| 成人动漫av在线| 欧美亚洲国产一区在线观看网站| 欧美日韩精品一区二区三区四区 | 夜夜爽夜夜爽精品视频| 亚洲一区二区三区四区的| 天天免费综合色| 国产一区二三区好的| 91同城在线观看| 欧美精选午夜久久久乱码6080| 精品国产乱码久久久久久老虎| 国产亚洲综合色| 亚洲一区二区美女| 狠狠色狠狠色合久久伊人| 成人激情小说网站| 欧美日韩国产区一| 久久久久久久性| 亚洲综合免费观看高清完整版| 毛片一区二区三区| 成人91在线观看| 日韩一级免费一区| 国产精品丝袜一区| 日韩电影在线一区| 99久久精品99国产精品| 91精品国产乱码久久蜜臀| 国产蜜臀av在线一区二区三区| 亚洲韩国精品一区| 国产91精品一区二区麻豆亚洲| 欧美亚洲国产怡红院影院| 久久久高清一区二区三区| 亚洲伊人伊色伊影伊综合网| 韩国女主播成人在线| 欧美性猛片xxxx免费看久爱| 精品国产乱码久久久久久久 | 狠狠色丁香九九婷婷综合五月| 97se亚洲国产综合在线| 精品黑人一区二区三区久久| 夜夜操天天操亚洲| 懂色av一区二区三区免费看| 91精品午夜视频| 一区二区三区精品视频| 粉嫩绯色av一区二区在线观看| 91精品国产91热久久久做人人| 中文字幕一区二区三区视频| 韩国欧美国产一区| 欧美一区二区三区在线观看| 亚洲情趣在线观看| 国产精品一级片在线观看| 欧美欧美欧美欧美首页| 亚洲人成精品久久久久久| 国产精品亚洲视频| 欧美成人伊人久久综合网| 亚洲午夜久久久久中文字幕久| www.综合网.com| 中文字幕精品一区二区精品绿巨人| 免费观看一级特黄欧美大片| 欧美三级乱人伦电影| 亚洲人成网站在线| 97aⅴ精品视频一二三区| 国产日韩一级二级三级| 国产一区二区三区四区在线观看| 91精品国产全国免费观看| 亚洲一区二区三区四区五区黄| 99国产精品一区| 中文字幕在线观看一区二区| 懂色av一区二区夜夜嗨| 久久久久国产免费免费| 国产一区二区三区四| 精品免费视频.| 久久99热国产| 日韩免费观看2025年上映的电影| 日本不卡视频在线观看| 欧美日本国产一区| 午夜精品久久久久久久99水蜜桃 | 1024成人网| 99久免费精品视频在线观看 | 蜜臀久久久久久久| 91精品在线观看入口| 日本少妇一区二区| 精品乱码亚洲一区二区不卡| 久久电影国产免费久久电影| 精品国产免费一区二区三区香蕉 | 欧美日韩三级在线| 国产乱码精品一区二区三| 久久久久久久电影| 国产精品996| 国产精品久久久久久久久晋中 | 国产一区二区成人久久免费影院| 久久日韩精品一区二区五区| 国产美女av一区二区三区| 国产喂奶挤奶一区二区三区| 国产成人小视频| 自拍偷在线精品自拍偷无码专区 | 欧美系列在线观看| 日本人妖一区二区| 精品久久国产字幕高潮| 国产99久久精品| 亚洲色图清纯唯美| 欧美曰成人黄网| 免费观看日韩电影| 日本一区二区在线不卡| 色欧美片视频在线观看| 天涯成人国产亚洲精品一区av| 精品久久久三级丝袜| 成人精品电影在线观看| 一区二区国产视频| 欧美一区二区成人6969| 国产伦精品一区二区三区免费 | 亚洲国产视频网站| 精品国产一区二区三区忘忧草| 国产99精品国产| 亚洲v日本v欧美v久久精品| 日韩写真欧美这视频| 成人av在线资源网站| 亚洲成人久久影院| 久久久亚洲国产美女国产盗摄| 91免费版pro下载短视频| 全国精品久久少妇| 国产精品乱子久久久久| 欧美日韩亚洲综合一区二区三区| 国产原创一区二区| 亚洲一二三四久久| 国产亚洲短视频| 欧美老女人在线| 成人av电影免费观看| 蜜臀av性久久久久蜜臀av麻豆| 国产精品久久久久久一区二区三区| 欧美日韩精品三区| 丁香另类激情小说| 免费不卡在线观看| 亚洲精品视频在线看| 26uuu亚洲综合色欧美| 欧美在线一二三四区| 国产精品乡下勾搭老头1| 性久久久久久久| 国产精品美女www爽爽爽| 欧美大尺度电影在线| 欧美最猛性xxxxx直播| 成人午夜伦理影院| 捆绑调教一区二区三区| 亚洲一区视频在线观看视频| 国产精品无人区| 精品国产乱码久久久久久图片|