lokale ip aus systemvariable ?
-
DrGreenthumb schrieb:
Ansonsten: http://www.c-plusplus.net/forum/viewtopic.php?t=43703
(btw. hab den Thread mal in die FAQ gepackt)
-
Hi !
Wenn du einen NAT Router hast (wie ich), kannst du dieses Script verwenden:
#!/bin/sh echo $(wget -O - -q http://www.whatismyip.com | grep -i title | awk '{print $4}')
-
hmm, die variante über das c-programm scheint mir noch die beste. nur wie bekomme ich den ermittelten wert dann in eine variable meines scripts ?
-
du kannst die IP ja auf die Standardausgabe schreiben, dann ist das ja kein Problem
> IP=`ip-program`
-
hmhm, super, das funktioniert schon mal ...
jetzt die nächste frage, wie bekomme ich IP als globale variable - envoriement - gesetzt ?
ich habe da schon ein paar sachen gefunden mit "export" aber das will nicht so richtig ... "set" brachte auch keinen erfolg
-
sonst benutz doch setenv(3)
-
also ich habe den c-code aus der faq am ende erweitert :
if( setenv( "IP_ETHO", inet_ntoa(i->sin_addr), true)==0) printf("set ok\n");
wenn ich jetzt in einer konsole
echo $IP_ETH0
eingebe, sollte es mir doch die IP anzeigen, oder ? es funktioniert nicht. irgendeine idee, was das schiefgeht. die funktion setenv() liefert 0 zurück, was laut man-page soviel wie OK bedeutet.
-
oh, ich weiss wo der Fehler liegt. Du kannst wohl leider setenv nicht benutzen, da setenv die Environment Variablen des Prozesses ändert und (da Environment Variablen ja vererbt werden) nur Prozesse dadurch beeinflusst werden, die von deinem Programm gestartet werden
Beispiel
#include <stdlib.h> #include <stdio.h> int main(void) { if(putenv("PUTENV=foo")==-1) { perror("putenv"); return 1; } if(setenv("SETENV","bar",1)==-1) { perror("setenv"); return 1; } system("set"); return 0; }
> gcc -Wall -W -Os env.c > ./a.out [...] PUTENV=foo [...] SETENV=bar [...] > set [...] #Variablen nicht mehr gesetzt
-
hmm, es muss doch eine möglichkeit geben, dieses kleine c-programm aus der faq beim booten aufzurufen und eine systemweite variable , wie es auch $HOST ist, zu erzeugen und zu setzen.
-
lass die ip von dem Programm auf die Standardausgabe ausgeben und dann machst du in /etc/profile
export IP=`ip-programm`
Weiß nicht ob /etc/profile da jetzt der richtige Platz ist, aber dass sollte schonmal funktionieren.