http - saber - rastrear ip de celular
Técnicas de detección de localización para direcciones IP. (9)
¿Cuáles son las técnicas de detección de ubicación para direcciones IP?
Sé mirar el
$_SERVER[''HTTP_ACCEPT_LANGUAGE'']
(no es preciso pero es útil para detectar la ubicación, por ejemplo, si los usuarios de un rango de IP configuran el francés en su navegador, significa que este rango) pertenece a Francia
y
gethostbyaddr($_SERVER[''REMOTE_ADDR''])
(para buscar el dominio de nivel superior del código de país)
entonces puede ser whois gethostbyaddr($_SERVER[''REMOTE_ADDR''])
algunas veces:
$HTTP_USER_AGENT
(la cadena de agente de usuario de Firefox tiene un código de idioma, no es precisa, pero se puede usar principalmente para detectar la ubicación)
También sé cómo obtener la zona horaria pero no funciona en los nuevos navegadores. Además, hay un problema de css que detecta el historial del visitante, se puede usar para ver qué páginas de google y wikipedia ha visitado (google.co.uk, google.com.tr)
Pero ¿qué pasa con las ciudades?
En lugar de utilizar una API de terceros, le sugeriría que utilice un registro de IP alojado automáticamente. Este post te explica más
http://www.techsirius.com/2014/05/simple-geo-tracking-system.html
Básicamente, están utilizando el registro de la base de datos de IP de la ciudad del país de maxmind [ http://dev.maxmind.com/geoip/geoip2/geolite2/] con algunas modificaciones. Después de eso una consulta de muestra.
$ip = $_SERVER[''REMOTE_ADDR''];
$long = sprintf(''%u'', ip2long($ip));
$sql = "SELECT * FROM `geo_ips` WHERE ''$long'' BETWEEN `ip_start` AND `ip_end`";
Existen bases de datos (algunas de ellas son gratuitas) que se pueden usar para convertir IP en ciudades:
Por ejemplo: http://www.maxmind.com/app/geolitecity
La mayoría de las bases de datos existentes utilizan una agregación de datos de los registros internacionales ARIN, AFRINIC, ANIC, etc., así como las ubicaciones enviadas por los usuarios. Técnicas más sofisticadas incluyen topología y restricciones Geolocalización.
Ejecuto mi propia API ipdata.co que proporciona varios puntos de datos, entre ellos, el país, la ciudad, la región, el lat / long y otros.
Esta respuesta utiliza una clave de API de "prueba" que es muy limitada y solo para probar algunas llamadas. Regístrese para obtener su propia clave de API gratuita y reciba hasta 1500 solicitudes diarias para el desarrollo.
php > $data = json_decode(file_get_contents(''https://api.ipdata.co/69.59.196.211?api-key=test''),true);
php > echo $data[''country_name''];
//United States
php > echo $data[''city''];
//Albany
No puede hacer esto sin una base de datos que asigne direcciones IP a ciudades / países / proveedores. Hay ofertas comerciales como ip2location que podría utilizar. Sin embargo, AFAIK no tiene una alternativa gratuita, ya que el mantenimiento de dicha base de datos de IP es bastante trabajo. Alternativa libre: GeoIP2
Actualización: hay varias cosas que le permiten crear tal db, si invierte suficiente tiempo:
- Utilice las bases de datos proporcionadas por los registros regionales y locales para encontrar el propietario de una IP.
- Muchos ISP utilizan un esquema de nombres que le permite localizar al usuario. A veces, incluso puede leer el nombre de la ciudad en texto sin formato si realiza una búsqueda DNS inversa. A veces es más críptico. Por ejemplo, actualmente tengo p5dcf6c4a.dip.t-dialin.net, y no tengo idea de que el esquema de denominación es ...
- Utilice un traceroute. Si no puede identificar la ubicación de un usuario, todavía puede encontrar la ubicación de su enlace ascendente
Puede asignar una dirección IP a su ubicación (ciudad, país, código postal), zona horaria, etc. ya sea con una base de datos o una API (base de datos alojada).
Aquí hay un ejemplo del uso de una API
curl https://ipapi.co/city/
> Mountain View
curl https://ipapi.co/country/
> US
curl https://ipapi.co/timezone/
> America/Los_Angeles
Más aquí: Ubicación desde la dirección IP
Si está buscando alguna solución para copiar y pegar, le pido este código:
function countryCityFromIP($ipAddr)
{
//function to find country and city from IP address
//Developed by Roshan Bhattarai http://roshanbh.com.np
//verify the IP address for the
ip2long($ipAddr)== -1 || ip2long($ipAddr) === false ? trigger_error("Invalid IP", E_USER_ERROR) : "";
$ipDetail=array(); //initialize a blank array
//get the XML result from hostip.info
$xml = file_get_contents("http://api.hostip.info/?ip=".$ipAddr);
//get the city name inside the node <gml:name> and </gml:name>
preg_match("@<Hostip>(/s)*<gml:name>(.*?)</gml:name>@si",$xml,$match);
//assing the city name to the array
$ipDetail[''city'']=$match[2];
//get the country name inside the node <countryName> and </countryName>
preg_match("@<countryName>(.*?)</countryName>@si",$xml,$matches);
//assign the country name to the $ipDetail array
$ipDetail[''country'']=$matches[1];
//get the country name inside the node <countryName> and </countryName>
preg_match("@<countryAbbrev>(.*?)</countryAbbrev>@si",$xml,$cc_match);
$ipDetail[''country_code'']=$cc_match[1]; //assing the country code to array
//return the array containing city, country and country code
return $ipDetail;
}
Espero que esto ayude a alguien.
Si la funcionalidad de geolocalización no es un requisito importante para su proyecto, puede usar algo tan simple como esto:
$geotxt='''';
$dt=json_decode(@file_get_contents(''https://freegeoip.net/json/''.$_SERVER[''REMOTE_ADDR'']));
if ($dt!=null) $geotxt=$dt->country_name.'', ''.$dt->region_name.'', ''.$dt->city;
echo $geotxt;
Debe tener en cuenta que freegeoip tiene un límite de 10k de solicitud / hora.
U puede usar esta función
function ip_info(){
return $data = json_decode(file_get_contents(''http://ip-api.com/json/''),true);
}
Llamar a la función
$info = ip_info();
var_dump($info);
Una forma en que se compilan estas bases de datos es a partir de la información whois. Por ejemplo, para determinar la ubicación de 69.59.196.211:
fmark @ home: ~ $ host 69.59.196.211 211.196.59.69.in-addr.arpa puntero del nombre de dominio .com. fmark @ home: ~ $ whois .com
Whois Server versión 2.0
Los nombres de dominio en los dominios .com y .net ahora se pueden registrar con muchos registradores competidores diferentes.
<SNIP>
> Registrante: .com llc
410 Clayton Ave El Cerrito, California 94530 Estados Unidos
<SNIP>
Obviamente, esto no es muy preciso, por lo que supuestamente se utilizan técnicas más sofisticadas.