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

📄 lsrr.patches

📁 TCP/IP详解
💻 PATCHES
📖 第 1 页 / 共 2 页
字号:
From owner-ineng-interest@venera.isi.edu Thu Aug  3 13:17:46 1989
Received: from venera.isi.edu by sccgate (5.61/1.34)
	id AA19575; Thu, 3 Aug 89 13:17:40 -0400
Received: by venera.isi.edu (5.61/5.61+local)
	id <AA08207>; Thu, 3 Aug 89 07:40:09 -0700
Posted-Date: Thu, 03 Aug 89 10:40:06 EDT
Received-Date: Thu, 3 Aug 89 07:40:03 -0700
Received: from FORNAX.ECE.CMU.EDU by venera.isi.edu (5.61/5.61+local)
	id <AA08200>; Thu, 3 Aug 89 07:40:03 -0700
Received: by fornax.ece.cmu.edu (5.54-ECE2/5.17)
	id AA20308; Thu, 3 Aug 89 10:40:08 EDT
From: Matt Mathis <mathis@fornax.ece.cmu.edu>
Message-Id: <8908031440.AA20308@fornax.ece.cmu.edu>
To: ietf@venera.isi.edu
Cc: van@helios.ee.lbl.gov
Subject: 3 Party traceroute
Date: Thu, 03 Aug 89 10:40:06 EDT
Status: R


Attached below is a patch file for Van Jacobson's traceroute, to add support
the IP LSRR (Loose Source Record Route) option in addition to the standard
traceroute/ttl stuff.

This is useful for asking how somebody else reaches a particular target.
For example: "traceroute -g 10.3.0.5 128.182.0.0" shows the path from the
Cambridge Mailbridge to PSC.  This works from (almost) anywhere!

traceroute -g 192.5.146.4 -g 10.3.0.5 35.0.0.0
Shows how the Cambridge Mailbrige reaches Merit, by using PSC to reach the
Mailbridge.

This version is substantially cleaned up by Jeff Honig at Cornell.  Thanks!

Van Jacobson's original traceroute (spring 1988) supported this feature,
but he removed it due to pressure from people with broken gateways.   At the
July 1989 IETF this issue was discussed, and the only objection noted was
later retracted with "I've been trying to get my management to upgrade our
gateways for a long time, maybe this will force the issue".   I expect Van's
traceroute to support LSRR sometime soon.  This patch should be considered
interim.

The Van's traceroute is available with anonymous ftp from ftp.ee.lbl.gov.
It does require kernel mods (Sorry, I don't have object modules.)

Caveats:

LSRR must be fully supported at least as far as the specified gateway.  This
seems to be the case for the NSFnet, ARPAnet and all reasonably recent
commercial gateways/routers.

LSRR must be supported (recognized as completed) or ignored between the
specified gateway to the final target.  This seems to be the case almost
every where else.

THERE MAY STILL BE GATEWAYS OUT IN THE INTERNET WHICH HAVE FATAL BUGS IN THE
CODE TO PROCESS ROUTING OPTIONS.   Be nice to your neighbors.

All of the the usual disclaimers about free code apply.

--MM--

*** /tmp/,RCSt1a01058	Mon Jul 31 22:20:06 1989
--- traceroute.c	Mon Jul 31 22:14:29 1989
***************
*** 202,210 ****
--- 202,212 ----
  #include <netinet/in_systm.h>
  #include <netinet/in.h>
  #include <netinet/ip.h>
+ #include <netinet/ip_var.h>
  #include <netinet/ip_icmp.h>
  #include <netinet/udp.h>
  #include <netdb.h>
+ #include <ctype.h>
  
  #define	MAXPACKET	65535	/* max ip packet size */
  #ifndef MAXHOSTNAMELEN
***************
*** 223,228 ****
--- 225,231 ----
  #define Fprintf (void)fprintf
  #define Sprintf (void)sprintf
  #define Printf (void)printf
+ 
  extern	int errno;
  extern  char *malloc();
  extern  char *inet_ntoa();
***************
*** 265,271 ****
  int nflag;			/* print addresses numerically */
  
  char usage[] =
!  "Usage: traceroute [-dnrv] [-w wait] [-m max_ttl] [-p port#] [-q nqueries] [-t tos] [-s src_addr] host [data size]\n";
  
  
  main(argc, argv)
--- 268,274 ----
  int nflag;			/* print addresses numerically */
  
  char usage[] =
!  "Usage: traceroute [-dnrv] [-w wait] [-m max_ttl] [-p port#] [-q nqueries] [-t tos] [-s src_addr] [-g gateway] host [data size]\n";
  
  
  main(argc, argv)
***************
*** 280,286 ****
--- 283,295 ----
  	int seq = 0;
  	int tos = 0;
  	struct hostent *hp;
+ 	int lsrr = 0;
+ 	u_long gw;
+ 	u_char optlist[MAX_IPOPTLEN], *oix;
  
+ 	oix = optlist;
+ 	bzero(optlist, sizeof(optlist));
+ 
  	argc--, av++;
  	while (argc && *av[0] == '-')  {
  		while (*++av[0])
***************
*** 288,293 ****
--- 297,334 ----
  			case 'd':
  				options |= SO_DEBUG;
  				break;
+ 			case 'g':
+ 				argc--, av++;
+ 				if ((lsrr+1) >= ((MAX_IPOPTLEN-IPOPT_MINOFF)/sizeof(u_long))) {
+ 				  Fprintf(stderr,"No more than %d gateways\n",
+ 					  ((MAX_IPOPTLEN-IPOPT_MINOFF)/sizeof(u_long))-1);
+ 				  exit(1);
+ 				}
+ 				if (lsrr == 0) {
+ 				  *oix++ = IPOPT_LSRR;
+ 				  *oix++;	/* Fill in total length later */
+ 				  *oix++ = IPOPT_MINOFF; /* Pointer to LSRR addresses */
+ 				}
+ 				lsrr++;
+ 				if (isdigit(*av[0])) {
+ 				  gw = inet_addr(*av);
+ 				  if (gw) {
+ 				    bcopy(&gw, oix, sizeof(u_long));
+ 				  } else {
+ 				    Fprintf(stderr, "Unknown host %s\n",av[0]);
+ 				    exit(1);
+ 				  }
+ 				} else {
+ 				  hp = gethostbyname(av[0]);
+ 				  if (hp) {
+ 				    bcopy(hp->h_addr, oix, sizeof(u_long));
+ 				  } else {
+ 				    Fprintf(stderr, "Unknown host %s\n",av[0]);
+ 				    exit(1);
+ 				  }
+ 				}
+ 				oix += sizeof(u_long);
+ 				goto nextarg;
  			case 'm':
  				argc--, av++;
  				max_ttl = atoi(av[0]);
***************
*** 411,416 ****
--- 452,475 ----
  		perror("traceroute: raw socket");
  		exit(5);
  	}
+ 
+ 	if (lsrr > 0) {
+ 	  lsrr++;
+ 	  optlist[IPOPT_OLEN]=IPOPT_MINOFF-1+(lsrr*sizeof(u_long));
+ 	  bcopy((caddr_t)&to->sin_addr, oix, sizeof(u_long));
+ 	  oix += sizeof(u_long);
+ 	  while ((oix - optlist)&3) oix++;		/* Pad to an even boundry */
+ 
+ 	  if ((pe = getprotobyname("ip")) == NULL) {
+ 	    perror("traceroute: unknown protocol ip\n");
+ 	    exit(10);
+ 	  }
+ 	  if ((setsockopt(sndsock, pe->p_proto, IP_OPTIONS, optlist, oix-optlist)) < 0) {
+ 	    perror("traceroute: lsrr options");
+ 	    exit(5);
+ 	  }
+ 	}
+ 
  #ifdef SO_SNDBUF
  	if (setsockopt(sndsock, SOL_SOCKET, SO_SNDBUF, (char *)&datalen,
  		       sizeof(datalen)) < 0) {





++++++++++++
>From owner-ineng-interest@venera.isi.edu Tue Aug  8 18:22:35 1989
Received: from venera.isi.edu by sccgate (5.61/1.34)
	id AA25608; Tue, 8 Aug 89 18:22:26 -0400
Received: by venera.isi.edu (5.61/5.61+local)
	id <AA12406>; Tue, 8 Aug 89 13:58:10 -0700
Posted-Date: Tue, 8 Aug 89 15:58:25 -0500
Received-Date: Tue, 8 Aug 89 13:58:06 -0700
Received: from uxc.cso.uiuc.edu by venera.isi.edu (5.61/5.61+local)
	id <AA12402>; Tue, 8 Aug 89 13:58:06 -0700
Received: by uxc.cso.uiuc.edu
	(5.61+/IDA-1.2.8) id AA28286; Tue, 8 Aug 89 15:58:25 -0500
Date: Tue, 8 Aug 89 15:58:25 -0500
From: "Paul Pomes (I'm the NRA!)" <paul@uxc.cso.uiuc.edu>
Message-Id: <8908082058.AA28286@uxc.cso.uiuc.edu>
To: ietf@venera.isi.edu, mathis@fornax.ece.cmu.edu
Subject: new traceroute man page w. IP LSRR
Cc: van@helios.ee.lbl.gov
Status: R

.\" Copyright (c) 1988 The Regents of the University of California.
.\" All rights reserved.
.\"
.\" Redistribution and use in source and binary forms are permitted
.\" provided that the above copyright notice and this paragraph are
.\" duplicated in all such forms and that any documentation,
.\" advertising materials, and other materials related to such
.\" distribution and use acknowledge that the software was developed
.\" by the University of California, Berkeley.  The name of the
.\" University may not be used to endorse or promote products derived
.\" from this software without specific prior written permission.
.\" THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
.\" IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
.\" WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
.\"
.\"	$Header: traceroute.8,v 1.1 89/02/28 20:46:12 van Exp $
.\"
.TH TRACEROUTE 8 "February 28, 1989"
.UC 6
.SH NAME
traceroute \- print the route packets take to network host
.SH SYNOPSIS
.B traceroute
[
.B \-m
max_ttl
] [
.B \-n
] [
.B \-p
port
] [
.B \-q
nqueries
] [
.B \-r
] [
.B \-s
src_addr
] [
.B \-g
addr
] [
.B \-t
tos
] [
.B \-w
waittime
]
.I host

⌨️ 快捷键说明

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