Hallo, Am Tue, 27 Sep 2005, Arno Lehmann schrieb:
On 27.09.2005 19:15, David Haller wrote:
Dafuer reicht ein Ping auf eine gueltige IP, z.B. die des DNS:
ping -n -c 1 -t 3 -w 20 194.25.2.129 ^^^^ IP bitte anpassen. Ein traceroute macht ja auch nix anderes als PINGs mit steigender ttl ab 1 auszusenden.
Na ja. Im Prinzip hast Du recht, aber zunächst mal glaube ich ja dass ich nicht wissen kann welche IPs extern gültig sind.
Naja, die des (externen) DNS-Servers sollte wohl gueltig sein... ;)
Und die IP-Adressen der nächsten Router können sich nun mal ändern. Und ein traceroute -m 3 134.76.123.34 | head -n 3 | tail -n 1 z.B. sollte dann imer eine Zeile ^^^^^^^^^^^ ueberfluessig, zumindest bei meinem traceroute
liefern die (hier) auf /2 *[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+ */ passt. Oder so.
Jep. Die Option -m von traceroute kannte ich noch gar nicht, das macht ja im Prinzip das, was gemeint war (s.u.).
Mit ping krieg' ich dann normalerweise ein ttl exceeded, und das sagt mir eben nicht ob der erste Upstream-Router geantwortet hat oder nur 'ne andere IP hat als ich erwartete.
Der Witz ist, dass du normalerweise (musst eben einmal mit traceroute schauen, wie du im Netz haengst) > 5 hops zu praktisch allen Servern hast. Bsp: $ traceroute ftp.de.kernel.org traceroute to ftp.de.kernel.org (62.112.154.204), 30 hops max, 40 byte packets 1 fritz.fonwlan.box (192.168.178.1) 1 ms 1 ms 1 ms 2 217.0.116.64 (217.0.116.64) 48 ms 43 ms 50 ms 3 217.0.68.146 (217.0.68.146) 45 ms 44 ms 44 ms 4 l-eb1.L.DE.net.DTAG.DE (62.154.89.102) 54 ms 54 ms 54 ms 5 62.156.139.98 (62.156.139.98) 60 ms 60 ms 59 ms 6 kpn.netdiscounter.de (134.222.107.254) 61 ms 60 ms 60 ms 7 gw.1st-housing.gbit1.netdiscounter.de (62.112.129.174) 61 ms 61 ms 62 ms 8 spiderman.gw-ext.fue.kgt.org (62.112.152.29) 63 ms 59 ms 62 ms 9 kgt.lkams.kernel.org (62.112.154.204) 65 ms 61 ms 60 ms Wenn man ein paar traceroutes in verschiedene Netze (in DE, EU, US) vergleicht sieht man, dass die ersten X hops immer gleich sind bzw. dass immer mindestens Y hops bis zu einem CIX sind. Bzw. man sieht, dass diese ersten hops immer aus dem gleichen Netz sind (z.B. 217.0.x.y bei der rosa Puschel Infrastuktur von hier aus)... Und die IPs, die noch im eigenen Netz liegen sollte man ja kennen (hier also 192.168.178.0/24 der fritzbox). Meine Idee war nun: per Ping mit begrenzter TTL auf eine bekanntermassen gueltige IP (eben z.B. den DNS des Providers o.ae) pingen. Kommt dann von ausserhalb des eigenen Netzes die Meldung: ==== $ ping -n -c 1 -t 4 -v -w 3 194.25.2.129 ### = dns00.btx.dtag.de PING 194.25.2.129 (194.25.2.129): 56 data bytes 36 bytes from 62.154.58.166: Time to live exceeded Vr HL TOS Len ID Flg off TTL Pro cks Src Dst Data 4 5 00 5400 7950 0 0000 01 01 e231 192.168.178.11 194.25.2.129 --- 194.25.2.129 ping statistics --- 1 packets transmitted, 0 packets received, 100% packet loss ==== XXX bytes from 62.154.58.166 (was auch ne dtag-IP ist), dann weiss man, dass das Netz bis zu diesem Host eben "steht". Die Loesung mit 'traceroute -m 4' ist aber wohl huebscher. Bequemer aber nicht unbedingt. EXTIP=`ping -n -c 1 -t 4 -v -w 3 194.25.2.129 \ | sed -n '/Time to live exceeded/s/.* \([0-9.]\+\):.*/\1/p'` Jetzt kann man noch pruefen, ob $EXTIP nicht aus dem eigenen Netz stammt oder ob $EXTIP aus einem der Netzbloecke des Providers stammt. Und schwuppdiwupp weiss man, dass das Netz da draussen laeuft ;) Nochmal: intern verwendet traceroute genau diesen Mechanismus: es sendet zur angeforderten IP (ggfs. nach Aufloesung eines Hostnamens) PING Pakete mit einer TTL von 1, 2, 3 ... bis der Zielhost erreicht ist oder ein Fehler (ausser TTL exceeded) auftritt... Die bei jedem Schritt gefundenen Hosts (die eben die Fehlermeldung TTL exceeded) zurueckschicken gibt traceroute eben aus (ggfs. wieder nach reverse-lookup des Hostnamens)... Simpelst: ==== poor-mans-traceroute UNGETESTET! ==== #!/bin/sh MAXHOPS=30 ## ist IIRC traceroute default TIMEOUT=2 test -n "$1" || { echo "Usage: $0 IP"; exit 1; } eingabeip="$1" hops=1 while test $hops -lt $MAXHOPS; do pingout="`ping -c 1 -t $hops -v -w $TIMEOUT $eingabeip`" # | tee /dev/stderr extip=`echo "$pingout" | sed -n "/Time to live exceeded\|bytes from $eingabeip/s/.* \([0-9.]\+\):.*/\1/p"` if test "x$extip" = "x$eingabeip"; then printf "% 2i %s\n" $hops $extip exit 0 elif test -n "$extip"; then printf "% 2i %s\n" $hops $extip else printf "% 2i * * *\n" $hops fi hops=$(( hops + 1 )) done ==== $ sh ~/bin/poor-mans-traceroute 194.25.2.129 1 * * * 2 217.0.116.64 3 217.0.68.150 4 62.154.58.166 5 62.156.139.102 6 194.25.2.129 Ich hoffe, es ist jetzt klarer, was ich gemeint habe ;) -dnh --
All cats purr at 28hz. I think your cats need tuning - according to a couple of quick measurements on a recently calibrated reference cat, the dominant frequency of a correctly adjusted cat should be 12Hz +/-20%. -- Lionel