Ich nutze seit längerem einen Code zum Anzeigen der IP

Begonnen von moonsorrox, 17 Februar 2016, 01:54:17

Vorheriges Thema - Nächstes Thema

dev0

Eine mögliche Variante, die die erste IP zurückliefert:
sub getip {return `hostname -I |awk '{print \$1}'`}

moonsorrox

Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM

justme1968

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.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

dev0

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;

justme1968

das ist aber ein extra packet und scheint intern etwa das gleiche zu machen wie meine variante.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968