Tag,
On 28.09.2005 03:22, David Haller wrote:
...
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... ;)
Also gut, bei den root-Servern lass' ich ja mit mir reden. :-)
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
Normalerweise ja, aber damit kann ich zumindest auch unerwartete Ausgaben von traceroute als Fehler erkennen. Wenn's eben aus was für Gründen auch immer mehr Text gibt... allerdings hab' ich im Normalbetrieb dann auch noch ein >>&2 eingestreut...
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:
Äh, ja. Das ist mir klar. Aber irgendwie ist mir grade nicht klar wie das mein Problem löst (zugegeben, ursprünglich nicht meins): Ich will ja wissen ob eine Internetverbindung besteht. Ich kann die IP-Adresse des Upstream-Routers nicht wissen. Ich kann aber, ausgehend von der Kenntnis meines Netzwerks, wissen nach welchem Hop ich "Das Internet" am Draht habe, nämlich nach einem mehr als ich Router intern passiere.
Aber unabhängig davon - das häufigere Problem das ich sehe ist ein anderes, und damit kommt in der Tat Dein ping-Vorschlag besser zurecht als mein traceroute - sind router die gar keine ICMP ttl exceeded, timeouts oder echo replies verschicken. Ich muss da erst auf 'ne IP filtern, ping liefert dann schon das (brauchbare) timeout.
...
Die Loesung mit 'traceroute -m 4' ist aber wohl huebscher. Bequemer aber nicht unbedingt.
;-)
Stimmt. Das script drumrum hat mich damals etwas Zeit gekostet...
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'`
Jaja, ich geb' ja zu das das den einen oder anderen Prozess spart...
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 ;)
Wobei das dann wieder das unbequeme Drumherum ergibt :-P
... Danke für das schöne Beispiel. Wie gross ist eigentlich inzwischen Deine Sammlung solcher ad-hoc-Demontrationen?
Ich hoffe, es ist jetzt klarer, was ich gemeint habe ;)
Ooch, mir schon, nur bin ich bei meiner Lösung von dem - zugegebenermassen nicht besonders häufig zutreffenden - Fall ausgegangen dass ich eben keine garantiert vorhandene externe IP-Adresse kenne und dass ich nicht wissen kann aus welchem IP-Subnetz mein Provider seine Router versorgt.
Das ist allerdings bei genau einer Internetanbindung mit festem Vertragspartner bzw. Kabelvermieter eher kein Problem :-)
Arno
-dnh