Wie erhalte ich eine Client-IP-Adresse aus einem bestimmten Netzwerk?

Wie erhalte ich eine Client-IP-Adresse aus einem bestimmten Netzwerk?

Ich habe eine Bedingung zum Filtern der IP-Adresse des Clients und ich habe einfach sein IP-Netzwerk wie dieses 1.1.0.0/17. Wenn ein Client aus diesem Netzwerk als spezieller Benutzer auf meiner Website gefiltert wird. Und ich verwende auch PHP als Webdienstsprache.

Falls ein Kunde dies tut, IP 1.1.4.24wird er automatisch in die Datenbank eingetragen.

Kann mir jemand einen Weg nennen?

Antwort1

Ich nehme also an, dass Sie nach einer PHP-Lösung suchen. In diesem Fall benötigen Sie so etwas:

function get_ip_address() {
    // check for shared internet/ISP IP
    if (!empty($_SERVER['HTTP_CLIENT_IP']) && validate_ip($_SERVER['HTTP_CLIENT_IP'])) {
        return $_SERVER['HTTP_CLIENT_IP'];
    }

    // check for IPs passing through proxies
    if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
        // check if multiple ips exist in var
        if (strpos($_SERVER['HTTP_X_FORWARDED_FOR'], ',') !== false) {
            $iplist = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
            foreach ($iplist as $ip) {
                if (validate_ip($ip))
                    return $ip;
            }
        } else {
            if (validate_ip($_SERVER['HTTP_X_FORWARDED_FOR']))
                return $_SERVER['HTTP_X_FORWARDED_FOR'];
        }
    }
    if (!empty($_SERVER['HTTP_X_FORWARDED']) && validate_ip($_SERVER['HTTP_X_FORWARDED']))
        return $_SERVER['HTTP_X_FORWARDED'];
    if (!empty($_SERVER['HTTP_X_CLUSTER_CLIENT_IP']) && validate_ip($_SERVER['HTTP_X_CLUSTER_CLIENT_IP']))
        return $_SERVER['HTTP_X_CLUSTER_CLIENT_IP'];
    if (!empty($_SERVER['HTTP_FORWARDED_FOR']) && validate_ip($_SERVER['HTTP_FORWARDED_FOR']))
        return $_SERVER['HTTP_FORWARDED_FOR'];
    if (!empty($_SERVER['HTTP_FORWARDED']) && validate_ip($_SERVER['HTTP_FORWARDED']))
        return $_SERVER['HTTP_FORWARDED'];

    // return unreliable ip since all else failed
    return $_SERVER['REMOTE_ADDR'];
}

function validate_ip($ip) {
if (strtolower($ip) === 'unknown')
    return false;

// generate ipv4 network address
$ip = ip2long($ip);

// if the ip is set and not equivalent to 255.255.255.255
if ($ip !== false && $ip !== -1) {
    // make sure to get unsigned long representation of ip
    // due to discrepancies between 32 and 64 bit OSes and
    // signed numbers (ints default to signed in PHP)
    $ip = sprintf('%u', $ip);
    // do private network range checking
    if ($ip >= 0 && $ip <= 50331647) return false;
    if ($ip >= 167772160 && $ip <= 184549375) return false;
    if ($ip >= 2130706432 && $ip <= 2147483647) return false;
    if ($ip >= 2851995648 && $ip <= 2852061183) return false;
    if ($ip >= 2886729728 && $ip <= 2887778303) return false;
    if ($ip >= 3221225984 && $ip <= 3221226239) return false;
    if ($ip >= 3232235520 && $ip <= 3232301055) return false;
    if ($ip >= 4294967040) return false;
}
return true;
 }

Jetzt müssen Sie nur noch $ip = get_ip_address(); aufrufen.

Ich muss Ihnen sagen, DAS ISTEXTREM GEFÄHRLICHum Leuten Zugriff basierend auf IPs zu gewähren!

Antwort2

Ich bin mir nicht sicher, welche Ressourcen Ihnen zur Verfügung stehen, aber es gibt Geräte, die dies basierend auf der Identität des sich anmeldenden Benutzers erreichen. Beispielsweise verfügen Cisco ASA-Firewalls über eine Identitätsfunktion, die Anmeldeereignisse auf einem Microsoft Active Directory-Server aufnimmt und die Firewall über die IP-Adresse dieses Benutzers informiert. Dann schreiben Sie ACLs basierend auf dem Benutzernamen und nicht auf der IP. Es ist nicht perfekt, aber es funktioniert.

Identitätsbasierte Firewall von Cisco:http://www.cisco.com/c/dam/en/us/products/collateral/security/asa-5500-series-next-generation-firewalls/at_a_glance_c45-675579.pdf

Wie bereits erwähnt, ist das Filtern nach IP-Adressen nur ein erster Sicherheitsschritt. Es ist einfach, eine statische IP festzulegen oder sogar eine IP zu fälschen. Sie werden auch einen Authentifizierungsmechanismus benötigen.

verwandte Informationen