Start · Sprachen · PHP · Referenz · geoip_isp_by_name

geoip_isp_by_name

Funktion

Liefert den Namen des Internet Service Providers (ISP) für einen gegebenen Hostnamen oder eine IP-Adresse anhand der GeoIP-Datenbank.

seit PHP 1.0.1 Kategorie: misc

Signatur

geoip_isp_by_name(string $hostname): string|false

Beschreibung

geoip_isp_by_name() durchsucht die GeoIP-ISP-Datenbank (MaxMind) nach dem Internet Service Provider, der zu einem bestimmten Hostnamen oder einer IPv4-Adresse gehört. Die Funktion ist Teil der PECL-Extension geoip und erfordert die entsprechende ISP-Datenbank (GeoIP.dat mit ISP-Informationen), welche auf dem Server installiert sein muss.

Typische Einsatzbereiche sind die Analyse von Zugriffsprotokollen, die geographische Segmentierung von Besuchern oder die Erkennung von VPN-Nutzern und Proxys, da viele Hosting- und VPN-Anbieter als ISP eingetragen sind.

Die Funktion akzeptiert sowohl Hostnamen (z. B. example.com) als auch IP-Adressen als Zeichenkette. Bei Hostnamen wird intern eine DNS-Auflösung durchgeführt. Es ist zu beachten, dass die Qualität und Aktualität der Ergebnisse stark von der verwendeten GeoIP-Datenbank abhängt.

Die geoip-Extension sowie die zugehörigen Datenbanken werden von MaxMind nicht mehr aktiv für die alte PECL-Variante gepflegt. Für neue Projekte empfiehlt sich der Einsatz der maxmind-db/reader-Bibliothek zusammen mit den GeoIP2-Datenbanken.

Parameter

Name Typ Default Beschreibung
$hostname Pflicht string Der Hostname oder die IPv4-Adresse (als Zeichenkette), für den/die der ISP-Name ermittelt werden soll. Beispiele: '8.8.8.8' oder 'example.com'.

Rückgabewert

Typ
string|false
Beschreibung
Gibt den Namen des Internet Service Providers als Zeichenkette zurück, wenn ein Eintrag in der Datenbank gefunden wurde. Gibt false zurück, wenn kein ISP-Eintrag gefunden wurde, die ISP-Datenbank nicht verfügbar ist oder ein Fehler aufgetreten ist.

Beispiele

ISP für eine bekannte IP-Adresse ermitteln

<?php
// ISP für Googles öffentlichen DNS-Server ermitteln
$hostname = '8.8.8.8';
$isp = geoip_isp_by_name($hostname);

if ($isp !== false) {
    echo 'ISP für ' . $hostname . ': ' . $isp . PHP_EOL;
} else {
    echo 'ISP konnte nicht ermittelt werden.' . PHP_EOL;
}
ISP für 8.8.8.8: Google

ISP des aktuellen Besuchers ermitteln und protokollieren

<?php
// IP-Adresse des Besuchers aus der Server-Variablen lesen
$visitorIp = $_SERVER['REMOTE_ADDR'] ?? '127.0.0.1';

// Sicherstellen, dass es sich um eine gültige öffentliche IP handelt
if (filter_var($visitorIp, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE)) {
    $isp = geoip_isp_by_name($visitorIp);
    if ($isp !== false) {
        error_log('Besuch von ISP: ' . $isp . ' (' . $visitorIp . ')');
        echo 'Ihr Internet Service Provider: ' . htmlspecialchars($isp) . PHP_EOL;
    } else {
        echo 'ISP-Informationen nicht verfügbar.' . PHP_EOL;
    }
} else {
    echo 'Lokale oder reservierte IP-Adresse – kein ISP-Lookup möglich.' . PHP_EOL;
}

// Wichtig · Fallstricke

Veraltete Extension: Die PECL-geoip-Extension gilt als veraltet und wird nicht mehr aktiv gewartet. Für neue Projekte sollte die offizielle MaxMind DB Reader PHP-Bibliothek in Verbindung mit GeoIP2-Datenbanken verwendet werden.

Datenbank erforderlich: Die Funktion benötigt zwingend eine ISP-spezifische GeoIP-Datenbank. Die kostenlose GeoLite-Datenbank enthält in der Regel keine ISP-Daten; hierfür ist die kostenpflichtige GeoIP ISP-Datenbank von MaxMind notwendig.

Sicherheit: Vertraue der Ausgabe dieser Funktion nie blind für sicherheitskritische Entscheidungen, da ISP-Datenbankeinträge unvollständig oder veraltet sein können. Nutze htmlspecialchars() bei der Ausgabe des ISP-Namens im Browser, um XSS zu vermeiden.

IPv6: Die klassische PECL-geoip-Extension unterstützt IPv6 nur eingeschränkt oder gar nicht. Bei IPv6-Adressen kann die Funktion false zurückgeben.