iputils (by³o: Zebra)

Pawel Krawczyk kravietz w ceti.pl
Nie, 9 Maj 1999, 19:21:51 CEST


On Fri, May 07, 1999 at 01:10:25PM +0200, Tomasz K³oczko wrote:
> Tak czy owak przyda³oby siê mo¿e mieæ ju¿ w zasobach przynajmniej jakiego¶
> speca je¶li nie gotowy pakiet :)
> Da siê zrobiæ ?

Szczerze mówi±c, to nie jestem dobry w specach wiêc niechêtnie.

Ale mam jeszcze jedn± nowo¶æ, która mo¿e byæ przydatna. W pakiecie
iputils Ku¼niecowa (ftp.icm.edu.pl/pub/Linux/iproute/) jest programik
tracepath, który robi dok³adnie to samo co traceroute ale nie wymaga
SUIDa. Oryginalna wersja nie umie resolvowaæ adresów IP mijanych hostów,
wiêc naprawi³em ten feler i zainstalowa³em ten program na wszystkich
swoich serwerach zamiast traceroute. Userzy siê nie skar¿± :) Poni¿ej
patch (testowany na iputils-ss990417).

diff -ruN iputils/tracepath.c iputils-new/tracepath.c
--- iputils/tracepath.c	Sat Dec 19 20:07:50 1998
+++ iputils-new/tracepath.c	Fri Apr 30 18:40:27 1999
@@ -38,6 +38,7 @@
 int mtu = 65535;
 int hops_to = -1;
 int hops_from = -1;
+int no_resolve = 0;
 
 struct probehdr
 {
@@ -129,14 +130,23 @@
 		printf("%2d?: %-16s ", ttl, "[LOCALHOST]");
 	} else if (e->ee_origin == SO_EE_ORIGIN_ICMP) {
 		char abuf[128];
+		struct hostent *h;
 		struct sockaddr_in *sin = (struct sockaddr_in*)(e+1);
 
 		inet_ntop(AF_INET, &sin->sin_addr, abuf, sizeof(abuf));
 
-		if (sndhops>0)
-			printf("%2d:  %-16s ", sndhops, abuf);
-		else
-			printf("%2d?: %-16s ", ttl, abuf);
+		if(!no_resolve) {
+		h = gethostbyaddr((char *) &sin->sin_addr, sizeof(sin->sin_addr), AF_INET);
+			if (sndhops>0)
+				printf("%2d:  %-s  (%-s) ", sndhops, h ? h->h_name : abuf, abuf);
+			else
+				printf("%2d?: %-s  (%-s) ", ttl, h ? h->h_name : abuf, abuf);
+		} else {
+			if (sndhops>0)
+				printf("%2d: %-s ", sndhops, abuf);
+			else
+				printf("%2d?: %-s ", ttl, abuf);
+		} /* resolve */
 	}
 
 	if (rethops>=0) {
@@ -246,8 +256,8 @@
 	int ttl;
 	char *p;
 
-	if (argc != 2) {
-		fprintf(stderr, "tracepath <destination>[/<port>]\n");
+	if (argc < 2) {
+		fprintf(stderr, "tracepath [-n] <destination>[/<port>]\n");
 		exit(-1);
 	}
 
@@ -257,6 +267,10 @@
 		exit(1);
 	}
 	target.sin_family = AF_INET;
+	if (!strcmp(argv[1], "-n")) {
+		no_resolve = 1;
+		argv++; argc--;
+	}
 	p = strchr(argv[1], '/');
 	if (p) {
 		*p = 0;

-- 
Pawel Krawczyk, CETI internet, Krakow. http://www.ceti.pl/~kravietz/



Wiêcej informacji o li¶cie dyskusyjnej pld-devel-pl