Como obter um endereço IP de cliente de uma rede específica?

Como obter um endereço IP de cliente de uma rede específica?

Tenho a condição de filtrar o endereço IP do cliente e só tenho a rede IP deles assim 1.1.0.0/17. Caso algum cliente desta rede seja filtrado como usuário especial no meu site. E também uso php como linguagem de serviço web.

Caso o cliente tenha IP 1.1.4.24será automaticamente logado nos bancos de dados.

Alguém pode me dizer de alguma forma?

Responder1

Então presumo que você esteja procurando uma solução php? Nesse caso você precisará de algo assim:

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;
 }

Agora você só precisa ligar $ip = get_ip_address();

Preciso te dizer que ISSO ÉEXTREMAMENTE PERIGOSOpara dar acesso às pessoas com base em IPs!

Responder2

Não tenho certeza de quais recursos você tem disponíveis, mas existem dispositivos que fazem isso com base na identidade do usuário que está fazendo login. Por exemplo, os Cisco ASA Firewalls têm um recurso de identidade que capta eventos de login em um Microsoft Servidor Active Directory e alerta o firewall sobre o endereço IP desse usuário. Então você escreve ACLs com base no nome de usuário, em vez de IP. Não é perfeito, mas funciona.

Firewall baseado em identidade Cisco:http://www.cisco.com/c/dam/en/us/products/collateral/security/asa-5500-series-next-generation-firewalls/at_a_glance_c45-675579.pdf

Como já foi dito, a filtragem apenas pelo endereço IP é apenas um primeiro passo de segurança. É fácil definir um IP estático ou até mesmo falsificar um IP. Você também vai querer algum mecanismo de autenticação.

informação relacionada