FHEM Forum

FHEM => Sonstiges => Thema gestartet von: moonsorrox am 17 Februar 2016, 01:54:17

Titel: Ich nutze seit längerem einen Code zum Anzeigen der IP
Beitrag von: moonsorrox am 17 Februar 2016, 01:54:17
diesen Code habe ich in der 99_myUtils hinterlegt..

sub
getip(){
   my ($hash) = @_;

   my $cmdLine = 'hostname -I';
   my @ips = `$cmdLine`;
   return ( "@ips" );
}


in meiner RSS Anzeige nutze ich den Aufruf zum Anzeigen der IP
rgb 4876FF
moveby 0 25
text x y  { trim(getip()) }


aber heute soweit ich das beobachtet habe tut er es nicht mehr und zeigt mir eine ellenlange Zeichenkette mit Buchstaben, Doppelpunkten und Zahlen an.
Weiß jemand warum..?
Titel: Antw:Ich nutze seit längerem einen Code zum Anzeigen der IP
Beitrag von: Wzut am 17 Februar 2016, 07:16:01
IPv6 Adresse ?
Titel: Antw:Ich nutze seit längerem einen Code zum Anzeigen der IP
Beitrag von: moonsorrox am 17 Februar 2016, 11:01:30
Nein ganz normal IPv4
Titel: Antw:Ich nutze seit längerem einen Code zum Anzeigen der IP
Beitrag von: marvin78 am 17 Februar 2016, 11:55:19
Was gibt denn hostname -I auf der Konsole aus?

Das hört sich wirklich an, wie eine IPv6 Adresse.
Titel: Antw:Ich nutze seit längerem einen Code zum Anzeigen der IP
Beitrag von: moonsorrox am 17 Februar 2016, 12:08:56
Zitat von: marvin78 am 17 Februar 2016, 11:55:19
Was gibt denn hostname -I auf der Konsole aus?

Das hört sich wirklich an, wie eine IPv6 Adresse.

das ergibt einen Fehler "Unknown command hostname, try help"

Ich nehme diese Anzeige jetzt erst mal aus dem RSS heraus, weil es überdeckt mir die gesamte Zeile...!
Ich weiß jetzt auch nicht, wieviel Tage dies schon so ist, es muss irgendwann die letzten Tage mit einem Update passiert sein, da es ja immer funktioniert hatte. Aber so wichtig ist diese Anzeige jetzt auch nicht, denn sie zeigt mir nur die IP des Fhem Servers an.

Ich hänge mal den Screenshot an, damit ihr seht das es sich nicht um eine IPv6 Adresse handelt. Die angezeigte IP stand immer unter den angezeigten Tagen von Intel -NUC also in dem Fall unter "8 days"  ;)
Titel: Antw:Ich nutze seit längerem einen Code zum Anzeigen der IP
Beitrag von: peterk_de am 17 Februar 2016, 12:16:00
Ja, und das was da quer dahinter steht, genau so sehen ipv6 adressen aus ;-)
Titel: Antw:Ich nutze seit längerem einen Code zum Anzeigen der IP
Beitrag von: moonsorrox am 17 Februar 2016, 13:16:10
Zitat von: peterk_de am 17 Februar 2016, 12:16:00
Ja, und das was da quer dahinter steht, genau so sehen ipv6 adressen aus ;-)

ja, ich weiß wie IPv6 Adressen aussehen  ;)
das hat doch bisher mit meiner Fhem Server IP geklappt es sei denn in Perl hat sich etwas verändert, was ich allerdings nicht glaube

Das ist jetzt eher OT
Wenn du hier (https://de.wikipedia.org/wiki/IPv6) schaust in Wikipedia gibt es aber kaum 6er Adressen die einen doppelten Doppelpunkt haben und schon gar nicht steht am Ende "bad2"

Aber wie gesagt es hat ja bis vor 2-3 Tagen alles funktioniert, evtl. muss der Eintrag in der 99_myUtils geändert werden, denn was ja sein könnte ist das dieser Perl Begriff seit neuesten tatsächlich eine IPv6 anzeigen möchte und da ich diese nicht habe macht er am Ende ein "bad2" dahinter...
Ist ja alles möglich..
Vllt. sagt hier nochmal jemand der sich mit Perl besser auskennt etwas dazu, wobei ich schon gesucht habe..! Bin aber bisher nicht fündig geworden und wie schon geschrieben lasse ich es zur Not raus, ich kenne ja die IP  ;)
Titel: Antw:Ich nutze seit längerem einen Code zum Anzeigen der IP
Beitrag von: peterk_de am 17 Februar 2016, 13:38:48
doch, der :: ist in der norm (auslassungszeichen fü 0000-Blöcke) und bad2 ein absolut valider hex-block ... also das sind schon komplette ipv6-adressen, ohne irgendwas hintendran gehangenes. und so wie es aussieht, gleich mehrere (was auch völlig normal ist, also dass ein interface mehrere davon bekommen kann - z.b. stichwort privacy extensions)

warum das sich aber jetzt bei dir geändert hat kann ich dir nicht sagen - vermutlich hat es aber mit einem update des betriebssystems zu tun und nicht mit FHEM.
Titel: Antw:Ich nutze seit längerem einen Code zum Anzeigen der IP
Beitrag von: Puschel74 am 17 Februar 2016, 14:09:50
Ja es bietet sich durchaus an zu wissen wann man welches update gemacht hat.
Titel: Antw:Ich nutze seit längerem einen Code zum Anzeigen der IP
Beitrag von: moonsorrox am 17 Februar 2016, 14:21:06
Zitat von: Puschel74 am 17 Februar 2016, 14:09:50
Ja es bietet sich durchaus an zu wissen wann man welches update gemacht hat.

da hast du Recht, es war bei mir am Montag den 15.02.2016, aber da ich diese RSS Seite nicht täglich sondern eher wöchentlich (oder noch weniger) anschaue weiß ich also nicht welches Update es war.
Ich nutze ein Ubuntu und halte es eigentlich recht ordentlich auf dem aktuellen Stand, soll heißen ich habe eine Abfrage über Sysmon von Alexander in meinem Fhem und sehe sofort wann wieder aktuelle Pakete da sind, grad sind es wieder 7 Stk.
Dann gehe ich mit putty los und update  ;) :D

Wo genau ich was in Ubuntu sehen kann weiß ich leider nicht.. :-\
Titel: Antw:Ich nutze seit längerem einen Code zum Anzeigen der IP
Beitrag von: marvin78 am 17 Februar 2016, 16:59:50
In der Konsole (putty ...) gibt hostname -I (nicht anderes ist dein Aufruf - ein Linux Kommando. Das hat mit Perl wenig zu tun) immer alle IPs zurück. Diese sind mit Leerzeichen getrennt. Normalerweise steht die IPv4 Adresse am Anfang. Willst du nur diese aus dem Ausdruck heraus holen, musst du das mit split "ausschneiden" (oder eben ur das x. Element des Arrays zurück geben). Wichtig ist, dass du probierst, was hostname -I auf deiner Konsole zurück gibt und danach deine sub aufbaust. Man muss eben wissen, was der Code macht. Das in deinem Bild ist natürlich nicht nur eine einzelne IPv6 Adresse aber eben der komplette Ausdruck, der durch hostename -I zurück gegeben wird.
Titel: Antw:Ich nutze seit längerem einen Code zum Anzeigen der IP
Beitrag von: dev0 am 17 Februar 2016, 18:46:14
Alternativ zum perl split könnte man auch awk im Systemaufruf verwenden:

hostname -I |awk '{print $x}'

x = durch spaces getrennte Position in der Ausgabezeile. Siehe man awk.
Titel: Antw:Ich nutze seit längerem einen Code zum Anzeigen der IP
Beitrag von: moonsorrox am 17 Februar 2016, 19:52:11
Oh ja vorhin war ein Fehler, aber jetzt sehe ich es...!
10.0.0.50 fd00::81ff:1f72:e01:8c08 fd00::d9a6:1a92:b3da:2e41 fd00::4d97:c1f4:1fc4:95c3 fd00::baae:edff:fe77:bad2


d.h. er hat wohl bis zu dieser Änderung immer nur die IPv4 angezeigt und seit neusten eben beide, dann ist mir das klar

Zitat von: dev0 am 17 Februar 2016, 18:46:14
Alternativ zum perl split könnte man auch awk im Systemaufruf verwenden:

hostname -I |awk '{print $x}'

x = durch spaces getrennte Position in der Ausgabezeile. Siehe man awk.

OK, dass funktioniert super wenn ich in putty eingebe
hostname -I |awk '{print $1}'

zeigt er mir nur die IPv4

Aber wie baue ich das in meine RSS Ausgabe ein die sieht ja momentan so aus
text x y  {trim(getip()) }

da müßte dann ja nur dieser Teil
|awk '{print $1}'
eingebaut werden, ich bin da leider nicht so bewandert.
Habe schon einige Versuche ausprobiert aber kommt nur Müll bei raus  ;) :-\
Titel: Antw:Ich nutze seit längerem einen Code zum Anzeigen der IP
Beitrag von: marvin78 am 17 Februar 2016, 19:58:23
Nein. Du baust das in deine sub ein. Dort wird doch das Linux Kommando abgesetzt

Und dann kümmmerst du dich darum, dass du verstehst, was du da machst.


return ( "$ips[0]" );

funktioniert aber ggf. auch.
Titel: Antw:Ich nutze seit längerem einen Code zum Anzeigen der IP
Beitrag von: moonsorrox am 18 Februar 2016, 00:53:42
Zitat von: marvin78 am 17 Februar 2016, 19:58:23
return ( "$ips[0]" );

funktioniert aber ggf. auch.
nee, funktioniert leider nicht
Titel: Antw:Ich nutze seit längerem einen Code zum Anzeigen der IP
Beitrag von: dev0 am 18 Februar 2016, 06:29:24
Eine mögliche Variante, die die erste IP zurückliefert:
sub getip {return `hostname -I |awk '{print \$1}'`}
Titel: Antw:Ich nutze seit längerem einen Code zum Anzeigen der IP
Beitrag von: moonsorrox am 18 Februar 2016, 12:18:19
Super Danke das funktioniert jetzt so  ;)
Titel: Antw:Ich nutze seit längerem einen Code zum Anzeigen der IP
Beitrag von: justme1968 am 18 Februar 2016, 12:24:56
eine halbwegs platform unabhängige variante wäre so etwas:use IO::Socket::INET;
sub
plex_getLocalIP()
{
  my $socket = IO::Socket::INET->new(
        Proto       => 'udp',
        PeerAddr    => '8.8.8.8:53',    # google dns
        #PeerAddr    => '198.41.0.4:53', # a.root-servers.net
    );   
  my $ip = $socket->sockhost;
  close( $socket );

  return $ip if( $ip );

  #$ip = inet_ntoa( scalar gethostbyname( hostname() || 'localhost' ) );
  #return $ip if( $ip );

  return '<unknown>';
}


statt der google ip kann man jede andere erreichbare verwenden.

der aaskommentierte teil am ende ist leider nicht platform und perl version unabhängig.
Titel: Antw:Ich nutze seit längerem einen Code zum Anzeigen der IP
Beitrag von: dev0 am 18 Februar 2016, 20:51:49
Bei stackoverflow habe ich gerade neben deinem Beispiel noch folgende Variante gefunden:

use Net::Address::IP::Local;
# Get the local system's IP address that is "en route" to "the internet":
my $address = Net::Address::IP::Local->public;
Titel: Antw:Ich nutze seit längerem einen Code zum Anzeigen der IP
Beitrag von: justme1968 am 18 Februar 2016, 21:02:25
das ist aber ein extra packet und scheint intern etwa das gleiche zu machen wie meine variante.

gruss
  andre