Hallo Hat jemand Kenntnisse über das Auswerten der Routing-Tabelle unter Linux. Mit Hilfe von socket-Funktionen möchte ich wissen, welcher Gateway momentan gesetzt ist. Das Ganze soll später in einem C-Programm zur Weiterverarbeitung verwendet werden. Deshalb wäre es schön, wenn mir jemand einen Ansatz - in Form eines kleinen C-Programms - weiterhelfen könnte.
Das machjt man mittels ioctl Funktionen: ein Socket öffnen und dann mit dem Socket die entsprechende ioctl Funktion aufrufen. Welche das im Einzelnen sind, weiß ich nicht aus dem Kopf. Generell wirst Du aber mindestens zwei brauchen: 1. ein ioctl Aufruf um an die verschiedenen Netzwerkinterfaces heranzu kommen, 2. ein ioctl Aufruf um an die Routing Einträge hernzukommen.
Der Weg ist ein wenig Steinig, deshalb mag es sinnvoller sein, einfach ifconfig aufzurufen und das Ergebnis zu parsen. -- Gruß, virtual Quote of the Month Ich eß' nur was ein Gesicht hat (Creme 21)
Mit Hilfe der ioctl-Funktionen kann ich leider nur die Route setzen oder löschen, - SIOCADDRT und SIOCDELRT siehe W. Richard Stevens PvUN Seite 420. Was mich interessiert ist aber lediglich der momentan gesetzte Gateway. Hierzu ist kein entsprechender request für die ioctl-Funktion zu finden. dummerweise!!!!
Unter ifconfig wird der verwendete Gateway nicht angezeigt, du meinst wahrscheinlich route -n.
joe@ebola:~> /sbin/route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface link-local * 255.255.0.0 U 0 0 0 eth0 10.0.0.0 * 255.0.0.0 U 0 0 0 eth0 loopback * 255.0.0.0 U 0 0 0 lo [b]default 10.1.1.100 0.0.0.0 UG 0 0 0 eth0[/b]
Also entweder 1. Ausgabe des Commands parsen oder 2. Quellcode des Commands angucken oder 3. mittels strace gucken, was das Kommando macht (vermutlich /proc/net/route auslesen) -- Gruß, virtual Quote of the Month Ich eß' nur was ein Gesicht hat (Creme 21)