Neues in der Kategorie Geo

/geo/matrix_medium_6886658738.jpg

WWW::IP - Returns your ip address with failsafe mechanism von David Farrell ermittelt die eigene öffentliche IP-Adresse.

Beispiel

#!/usr/bin/perl
use strict;
use warnings;
use WWW::IP;

my $ip = get_ip();

print "IP: $ip\n";

Ausgabe des Beispielprogramms:

IP: 79.232.98.21

Failsafe

Um Ausfallsicherheit zu erreichen, fragt WWW::IP nacheinander bis zu drei verschiedene Dienste (Webservices), für die entsprechende Perl Module zur Verfügung stehen, ab:

Der erste Treffer gewinnt, die anderen Dienste werden dann nicht mehr abgefragt.

 

WWW::curlmyip

WWW::curlmyip von David Farrell nutzt http://curlmyip.com/ um die öffentliche IP-Adresse zu ermitteln.

Beispiel

#!/usr/bin/perl
use strict;
use warnings;
use WWW::curlmyip;

my $ip = get_ip();

print "IP: $ip\n";

Ausgabe des Beispielprogramms:

IP: 79.232.98.21

 

WWW::hmaip

WWW::hmaip von David Farrell nutzt http://geoip.hidemyass.com/ip/ um die öffentliche IP-Adresse zu ermitteln.

Beispiel

#!/usr/bin/perl
use strict;
use warnings;
use WWW::hmaip;

my $ip = get_ip();

print "IP: $ip\n";

Ausgabe des Beispielprogramms:

IP: 79.232.98.21

 

WWW::ipinfo

WWW::ipinfo von David Farrell nutzt http://ipinfo.io/ um die öffentliche IP-Adresse zu ermitteln. Weiterhin können Geolocation Daten zu der IP-Adresse abgefragt werden.

Die Funktion get_ipinfo() liefert eine Referenz auf einen Hash mit der IP Adresse und den Geolocation Daten zurück.

Beispiel

#!/usr/bin/perl
use strict;
use warnings;
use WWW::ipinfo;

my $ipinfo = get_ipinfo();

my @ipinfo_keys = qw/ip hostname city region country loc org postal/;

foreach my $ipinfo_key (@ipinfo_keys) {
    $ipinfo->{$ipinfo_key} = 'unknown' unless $ipinfo->{$ipinfo_key};
    print "$ipinfo_key: $ipinfo->{$ipinfo_key}\n";
}

Ausgabe des Beispielprogramms:

ip: 79.232.98.21
hostname: p4FE86215.dip0.t-ipconnect.de
city: Leimbach
region: Hessen
country: DE
loc: 50.7500,9.7833
org: AS3320 Deutsche Telekom AG
postal: unknown

Der Funktion get_ipinfo() kann auch eine IPv4 oder IPv6 Adresse als Parameter übergeben werden, dann werden die Geolocation Daten für die angegebene IP zurückgeliefert.

 

Siehe auch:

 

Bildnachweis

phsymyst via photopin cc

 

Geo::IP von Boris Zentner ermöglicht die regionale Zuordnung von IP-Adressen oder Hostnamen.

Geo::IP bietet eine kleine, aber häufig ausreichende, Auswahl an Geoinformationen der Geolocation Datenbank vom MaxMind. Wer mehr möchte, muss auf die kommerzielle Version upgraden.

Nachfolgend ein Beispiel zur Ermittlung des Herkunftslandes und ein Beispiel zur Ermittlung detaillierter Ortsinformationen.

Beispiel Länderinfo (Herkunftsland)

Geo::IP liefert Länderinformationen gemäß ISO 3166 zurück. Für weitere Details verweise ich auf den Beitrag Locale::Country - ISO 3166 - Norm für Kodierung von geographischen Einheiten.

#!/usr/bin/perl 
use strict;
use warnings;

use Geo::IP;

my $ip = '81.169.145.71';
my $host = 'perl-howto.de';


	# Download: http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz
	# Nutzt GeoIP.dat in /usr/local/share/GeoIP/
my $gi = Geo::IP->new(GEOIP_STANDARD) or die $!;

	# Datenbankinfos ausgeben
my $db_info = $gi->database_info() or die $!;
print "Datenbankinfo: $db_info\n";

    # Methoden bei bekannter IP

my $country     = $gi->country_code_by_addr( $ip ) or die $!;
my $country3    = $gi->country_code3_by_addr( $ip ) or die $!;
my $countryname = $gi->country_name_by_addr( $ip ) or die $!;

print "\n";
print "Info fuer $ip\n";
print "Country:      $country\n";
print "Country3:     $country3\n";
print "Country Name: $countryname\n";

    # Methoden bei bekanntem Host

$country     = $gi->country_code_by_name( $host ) or die $!;
$country3    = $gi->country_code3_by_name( $host ) or die $!;
$countryname = $gi->country_name_by_name( $host ) or die $!;

print "\n";
print "Info fuer $host\n";
print "Country:      $country\n";
print "Country3:     $country3\n";
print "Country Name: $countryname\n";

Das Programm erzeugt folgende Ausgabe

Datenbankinfo: GEO-106FREE 20090201 Build 1 Copyright (c) 2007 MaxMind LLC All Rights Reserved

Info fuer 81.169.145.71
Country:      DE
Country3:     DEU
Country Name: Germany

Info fuer perl-howto.de
Country:      DE
Country3:     DEU
Country Name: Germany

Beispiel Ortsinfo

Hierzu wird zusätzlich die Datenbank GeoLiteCity.dat benötigt (Download).

#!/usr/bin/perl 
use strict;
use warnings;

use Geo::IP;

my $ip   = '81.169.145.71';    # perl-howto.de
my $host = 'google.de';

# Download --> http://geolite.maxmind.com/download/geoip/database/
my $gi =
  Geo::IP->open( "/usr/local/share/GeoIP/GeoLiteCity.dat", GEOIP_STANDARD )
  or die $!;

my $db_info = $gi->database_info();
print "Datenbankinfo: $db_info\n";

my $record = $gi->record_by_addr($ip) or die $!;
display( $ip, $record );

$record = $gi->record_by_name($host) or die $!;
display( $host, $record );

###########################################################
sub display {
    my $info   = shift @_;
    my $record = shift @_;

    print "Info fuer $info\n";
    print "Country Code:   ", $record->country_code,   "\n";
    print "Country Code3:  ", $record->country_code3,  "\n";
    print "Country Name:   ", $record->country_name,   "\n";
    print "Region:         ", $record->region,         "\n";
    print "Region (Name):  ", $record->region_name,    "\n";
    print "City:           ", $record->city,           "\n";
    print "PLZ:            ", $record->postal_code,    "\n";
    print "Latitude:       ", $record->latitude,       "\n";
    print "Longitude:      ", $record->longitude,      "\n";
    print "TimeZone:       ", $record->time_zone,      "\n";
    print "Area Code:      ", $record->area_code,      "\n";
    print "Continent Code: ", $record->continent_code, "\n";
    print "Continent Name: ",
      continentcode2continent( $record->continent_code ), "\n";
    print "Metro Code:     ", $record->metro_code, "\n";
    print "\n";
}
###########################################################
sub continentcode2continent {
    my $code = shift @_;

    #Possible continent codes are AF, AS, EU, NA, OC, SA
    #for Africa, Asia, Europe, North America, Oceania  and South America.
    my %continent = (
        'AF' => 'Africa',
        'AS' => 'Asia',
        'EU' => 'Europe',
        'NA' => 'North America',
        'OC' => 'Oceania',
        'SA' => 'South America',
    );
    if ( exists $continent{$code} ) {
        return $continent{$code};
    }
    else {
        warn "Unknown Continent for <$code>\n";
        return;
    }
}
###########################################################

Das Programm erzeugt folgende Ausgabe

Datenbankinfo: GEO-533LITE 20090201 Build 1 Copyright (c) 2007 MaxMind LLC All Rights Reserved

Info fuer 81.169.145.71
Country Code:   DE
Country Code3:  DEU
Country Name:   Germany
Region:         16
Region (Name):  Berlin
City:           Berlin
PLZ:            
Latitude:       52.5167
Longitude:      13.4000
TimeZone:       Europe/Berlin
Area Code:      0
Continent Code: EU
Continent Name: Europe
Metro Code:     0

Info fuer google.de
Country Code:   US
Country Code3:  USA
Country Name:   United States
Region:         CA
Region (Name):  California
City:           Mountain View
PLZ:            94043
Latitude:       37.4192
Longitude:      -122.0574
TimeZone:       America/Chicago
Area Code:      650
Continent Code: NA
Continent Name: North America
Metro Code:     807

Hier lässt sich erkennen, das die Städte-Datenbank für Nordamerika besser gefüllt ist als für Europa.

Ubuntu Installationstipps

Zunächst sollten die Bibliotheken für Geo::IP installiert werden:

sudo apt-get install libgeoip1 libgeoip-dev

Die Datenbank GeoIP.dat befindet sich nun in /usr/share/GeoIP/.

Geo::IP erwartet die Datenbanken aber in /usr/local/share/GeoIP/.

Also installiere ich die Datenbank und die monatlich kostenlos zum Download zur Verfügung gestellten Updates nach /usr/local/share/GeoIP/, da Geo::IP die Datenbanken dort erwartet.

Siehe auch:

Über dieses Archiv

Diese Seite enthält aktuelle Einträge der Kategorie Geo.

Finance ist die vorherige Kategorie.

Humor ist die nächste Kategorie.

Aktuelle Einträge finden Sie auf der Startseite, alle Einträge in den Archiven.

Blog Roll

Powered by

Powered by Movable Type 5.2.10

Creative Commons-Lizenz

Creative Commons License
Dieses Weblog steht unter einer Creative Commons-Lizenz.