Este sería un ejemplo del tipo de topics que propongo en el post
Le interesa a alguien intentar rescatar SVC ??Hace ya mucho tiempo hice este pequeño pero muy buen log en PHP usando Geolocalización. Principalmente lo uso en sitios de mis clientes Wordpress (WP) ya que WP es muy atacado para buscar vulnerabilidades (Nunca me han vulnerado un sitio
)
Yo uso este tipo de Logs para registrar, principalmente algún Bot que quiera meterse donde no deba. A mi Geoplugin me funciona muy bien ya que lo corroboro con el Firewall y la verdad no me da fallos.
<?php
// Defino Zona horaria a usar
date_default_timezone_set("Europe/Paris");
// Quito las IPs que no quiero que se incluyan en el Log
$myIPs = ["185.313.469.299", "375.213.269.99"];
// Extraigo la IP del cliente con esta función
function getIpAddress() {
$heads = ["HTTP_CLIENT_IP","HTTP_X_FORWARDED_FOR","HTTP_X_FORWARDED","HTTP_X_CLUSTER_CLIENT_IP","HTTP_FORWARDED_FOR","HTTP_FORWARDED","REMOTE_ADDR"];
foreach($heads as $head){
if(array_key_exists($head, $_SERVER)){
foreach(array_map("trim",explode(",",$_SERVER[$head])) as $ip){
if ( filter_var( $ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE ) !== false ) {
return $ip;
}
}
}
}
return "UNKNOWN";
}
$ip = getIpAddress();
// Aca hago el filtro de mis IPs a no tomar en cuenta
if (!in_array($ip, $myIPs)) {
// Obtengo la Geolocation de la IP
function getGeolocation() {
$ip = getIpAddress();
$data = unserialize(@file_get_contents("http://www.geoplugin.net/php.gp?ip=".$ip));
return $data;
}
$location = getGeolocation();
// Acá guardo en variables la información a escribir en el Log
/* De la Global $_SERVER se coge toda la información
que queramos, puedes ver todo lo que $_SERVER tiene con lo siguiente
echo "<pre>";
print_r($_SERVER);
echo "</pre>";
*/
$date = new DateTime();
$date = $date->format("d/m/Y H:i:s");
$country = $location["geoplugin_countryName"]; // Pais
$city = $location["geoplugin_city"]; // Ciudad
$method = $_SERVER["REQUEST_METHOD"]; // POST o GET
$request = $_SERVER["REQUEST_URI"]; // Que ruta visitan
// Escribo en mi OCHOA_log.txt
$file = "OCHOA_log.txt";
$log = $date." - ".$ip." - ".$country." - ".$city." - ".$method." - ".$request." - "." * ";
if (is_writable($file)) {
$file = fopen($file, "a");
fwrite($file, $log.PHP_EOL);
fclose($file);
}
}
/* Si por alguna razón (más que todo didactica) quieres ver ese log
en el navegador (pocos registros) puedes hacerlo así */
// Lees tu log y buscas el separador de cada dato para crear un array
// yo le puse como separarador un espacio un guion medio y otro espacio
$lines = file("log.txt");
foreach ($lines as $line) {
$logs[] = explode(" - ", $line);
}
?>
Y el HTML para ver el log (Si son pocos registros) sería:
<!-- Haces una tabla sencilla -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>OCHOA Log</title>
<!-- Bootstrap -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css" integrity="sha384-rbsA2VBKQhggwzxH7pPCaAqO46MgnOM80zW1RWuH61DGLwZJEdK2Kadq2F9CUG65" crossorigin="anonymous">
</head>
<body>
<div class="container-fluid">
<h3 class="text-center mb-3 mt-3">IPs LOG</h3>
<table class="table table-striped">
<thead>
<tr>
<th scope="col">Fecha</th>
<th scope="col">IP</th>
<th scope="col">País</th>
<th scope="col">Ciudad</th>
<th scope="col">Method</th>
<th scope="col">URL</th>
</tr>
</thead>
<tbody>
<?php
foreach ($logs as $log) {
?>
<tr>
<td class="align-middle">
<?php echo $log[0]; ?>
</td>
<td class="align-middle">
<?php echo $log[1]; ?>
</td>
<td class="align-middle">
<?php echo $log[2]; ?>
</td>
<td class="align-middle">
<?php echo $log[3]; ?>
</td>
<td class="align-middle">
<?php echo $log[4]; ?>
</td>
<td class="align-middle">
<?php echo $log[5]; ?>
</td>
</tr>
<?php
}
?>
</tbody>
</table>
</div>
</body>
</html>
El resultado sería este. (Ese es mi resultado)
Como ya vieron, Geoplugin no es del 100% "confiable" pues puede que alguien cerca de ti use VPNs o que no registre (como en mi ejemplo) algunas ciudades, pero por lo demás nunca he visto una diferencia en el País de origen de una petición.
Para verificar el origen de una IP pueden usar:
https://www.cual-es-mi-ip.net/geolocalizar-ip-mapaYo uso este Log en los 404 de todos mis sitios WP y me sirve para monitorizar y controlar trafico malicioso, luego en mi Firewall lo cotejo y lo bloqueo (si el cliente no tiene FW lo hago en el .htaccess) y como repito estoy muy contento con su funcionamiento, nunca me ha dado problemas y muchos usan mi log en muchos otros sitios también ya que lo he compartido mucho.
PD: Parece que el tag de Code, no deja poner comillas simples (') y me tocó poner comillas dobles (") en el script de PHP, pero en mi caso uso cada tipo de comilla conforme las buenas practicas lo proponen