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

📄 main.c

📁 unix下基于IP协议的TRACE ROUTE 代码程序;C/C++语言
💻 C
字号:
#include	"trace.h"struct proto	proto_v4 = { icmpcode_v4, recv_v4, NULL, NULL, NULL, NULL, 0,							 IPPROTO_ICMP, IPPROTO_IP, IP_TTL };#ifdef	IPV6struct proto	proto_v6 = { icmpcode_v6, recv_v6, NULL, NULL, NULL, NULL, 0,							 IPPROTO_ICMPV6, IPPROTO_IPV6, IPV6_UNICAST_HOPS };#endifint		datalen = sizeof(struct rec);	/* defaults */int		max_ttl = 30;int		nprobes = 3;u_short	dport = 32768 + 666;intmain(int argc, char **argv){	int				c;	struct addrinfo	*ai;	opterr = 0;		/* don't want getopt() writing to stderr */	while ( (c = getopt(argc, argv, "m:v")) != -1) {		switch (c) {		case 'm':			if ( (max_ttl = atoi(optarg)) <= 1)				err_quit("invalid -m value");			break;		case 'v':			verbose++;			break;		case '?':			err_quit("unrecognized option: %c", c);		}	}	if (optind != argc-1)		err_quit("usage: traceroute [ -m <maxttl> -v ] <hostname>");	host = argv[optind];	pid = getpid();	Signal(SIGALRM, sig_alrm);	ai = Host_serv(host, NULL, 0, 0);	printf("traceroute to %s (%s): %d hops max, %d data bytes\n",		   ai->ai_canonname,		   Sock_ntop_host(ai->ai_addr, ai->ai_addrlen),		   max_ttl, datalen);		/* initialize according to protocol */	if (ai->ai_family == AF_INET) {		pr = &proto_v4;#ifdef	IPV6	} else if (ai->ai_family == AF_INET6) {		pr = &proto_v6;		if (IN6_IS_ADDR_V4MAPPED(&(((struct sockaddr_in6 *)ai->ai_addr)->sin6_addr)))			err_quit("cannot ping IPv4-mapped IPv6 address");#endif	} else		err_quit("unknown address family %d", ai->ai_family);	pr->sasend = ai->ai_addr;		/* contains destination address */	pr->sarecv = Calloc(1, ai->ai_addrlen);	pr->salast = Calloc(1, ai->ai_addrlen);	pr->sabind = Calloc(1, ai->ai_addrlen);	pr->salen = ai->ai_addrlen;	traceloop();	exit(0);}

⌨️ 快捷键说明

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