[root@Linux th3r0rn]# ./header

 - [root@Linux th3r0rn]# ./header

-->


Detectar el pais de procedencia de una direccion IP con PHP

Por th3r0rn | 21 de November de 2009 |2 comentarios

Hola, jugando un poco con php se me ocurrio como poder detectar el pais de procedencia de una direccion ip, esto nos viene muy util como por ejemplo para hacer alguna tienda virtual y poder calcular la moneda local del pais de nuestro visitante o interactuar contenido de acuerdo a su pais de origen, para obtener una direccion ip contamos con varias funciones en php, el problema aqui es como hacerle para saber el pais de dicha direccion. Pues bueno esto es lo que voy a poner aqui :).

En primer lugar lo que necesitamos para detectar el pais de una direccion ip es saber que rangos de direcciones ip pertenecen a cada pais, entonces necesitaremos una “amplia” base de datos con esta informacion.

Es aqui cuando nace el trabajo de ip-to-countrry Este sitio nos brinda una base de datos con todos los rangos de ips de todos los paises, la base de datos esta en formato CSV (del inglés comma-separated values.)
Procedemos a descargarla y la descomprimimos a fin de tener el archivo .csv en un directorio. Ahora lo que necesitamos es pasar esos datos de esa base de datos a nuestra base de datos en mysql.
Para esto podemos hacerlo con un script muy sencillo en php:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<?php
  $conexion=@mysql_connect("localhost","root","123456");
  if (!$conexion) die ("NO SE PUDO CONECTAR CON LA DB");


  @mysql_select_db("PAISES",$conexion);
// Se crea la tabla de los rangos de IP, y se verifica.
  $consulta="CREATE TABLE ipCountry (ipStart DOUBLE NOT NULL, ipEnd DOUBLE NOT NULL, countryCode2 CHAR(2) NOT NULL default '', countryCode3 CHAR(3) NOT NULL default '', countryName VARCHAR(50) NOT NULL default '', PRIMARY KEY (ipStart, ipEnd)) TYPE=MyISAM;";
  $hacerConsulta=@mysql_query($consulta, $conexion);
  if (!$hacerConsulta) die ("LA TABLA NO PUDO SER CREADA.");
// Se abre el fichero csv de los rangos de IP's.
  $manejadorFichero=fopen("ip-to-country.csv","r");
// Se define una matriz para almacenar los rangos.
  $matriz=array();
/* Mientras haya datos, se lee cada línea y se almacena en un elemento de $matriz.
Cada elemento es, a su vez, una matriz con cinco elementos. */

  while (!feof($manejadorFichero)){
    $matriz[]=fgetcsv($manejadorFichero);
  }
/* Se recorre la matriz y se desglosa cada elemento, para insertar una nueva fila de la tabla. */
  foreach ($matriz as $rangoIPs){
/* Se comprueba que el elemento tenga un contenido real.*/
    if ($rangoIPs[0]!=""){
      $consulta="INSERT INTO ipCountry (ipStart, ipEnd, countryCode2, countryCode3, countryName) VALUES (\"$rangoIPs[0]\", \"$rangoIPs[1]\", \"$rangoIPs[2]\", \"$rangoIPs[3]\", \"$rangoIPs[4]\");";
      $hacerConsulta=mysql_query($consulta, $conexion);
    }
  }
/* Se cierra el fichero CSV y la BBDD.*/
  fclose ($manejadorFichero);
  mysql_close($conexion);
/* Se muestra el resultado.*/
  echo ("La BBDD y la tabla han sido creadas.<br>");
?>

Aqui creamos una matriz. En cada elemento de la misma pretendemos almacenar todos los datos del fichero, es decir de uno de los rangos de IP’S. Para ello, leemos el fichero con un bucle que se estara ejecutando mientras no se encuentre el final (!feof) con esta funcion detectamos el final del fichero.
Los datos de cada linea generan un nuevo elemento de la matriz. Y aqui aparece la funcion fgetcsv() Esta funcion ha sido implementada en PHP especificamente para la lectura de ficheros CSV. Como argumento recibe el manejador con el que hemos abierto el archivo. El resultado es la lectura de una linea completa hasta el salto de linea. Atraves de las comas identifica cual es cada dato. Cuyo valor debe aparecer entrecomillado, con todos los datos genera una matriz indexeada, con un elemento por dato. En este caso, la matriz tendra cinco elementos. Supongamos que aplicamos la funcion para leer la primera linea, exclusivamente. La matriz tendra los siguientes elementos:

1
2
3
4
5
6
7
Array(
[0]"33996344"
[1]"33996351"
[2]"GB"
[3]"GRB"
[4]"UNITED KINGDOM"
)

Esto es por que el formato de los ficheros CSV es de esta manera, y si lo revisamos veremos las ips y los demas datos estan en dicho formato:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
"50331648","69956103","US","USA","UNITED STATES"

"69956104","69956111","BM","BMU","BERMUDA"

"69956112","72349055","US","USA","UNITED STATES"

"72349056","72349119","BM","BMU","BERMUDA"

"72349120","83886079","US","USA","UNITED STATES"

"100663296","121195295","US","USA","UNITED STATES"

"121195296","121195327","IT","ITA","ITALY"

"121195328","134693119","US","USA","UNITED STATES"

"134693120","134693375","CA","CAN","CANADA"

"134693376","134730239","US","USA","UNITED STATES"

"134730240","134730495","CA","CAN","CANADA"

En el caso del bucle de nuestro codigo, esta matriz se almacena en un elemento de la matriz que hemos llamado $matriz. Esto significa que $matriz al final del bucle, tendra mas de 99753 elementos (uno por cada linea del ficheri CSV) y cada uno sera una pequeña matriz con cinco elementos. Asi pues, $matriz es realmente, una matriz de dos dimensiones. Observemos que a $matriz No le hemos asignado un indice especifico, asi que en cada iteraccion del bucle se generara un nuevo elemento.
Tras generar $matriz se usa el bucle foreach para recorrerla entera. Cada elemento que ya sabemos que es asu vez, una pequeña matriz, contiene cinco datos. Estos se usan para generar un nuevo registro en la tabla MYSQL. Vemos que dentro del bucle foreach se comprueba si la IP inicial (elemento [0] de la matriz) tiene contenido. Esto se hace por que el fichero CSV puede contener lineas en blanco al final del mismo y estas tambien generan elementos en la matriz principal, pero no debemos almacenarlas en la tabla MySQL.
Ahora el siguiente paso es crear una funcion que encuentre la ip del cliente que se conecta al servidor, esto lo hacemos en un archivo por aparte al que llamaremos obtenerIP.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
<?

  function obtenerIPCliente() {

/* En la variable $ip se almacenará la dirección del cliente. */

    $ip = 0;

/* Si la variable $_SERVER['HTTP_CLIENT_IP'] tiene algún contenido, se asigna a la variable $ip. */

    if (!empty($_SERVER['HTTP_CLIENT_IP'])) $ip = $_SERVER['HTTP_CLIENT_IP'];

/* Si la variable $_SERVER['HTTP_X_FORWARDED_FOR'] tiene algún contenido, se asigna a la variable $ip.

En ese caso debe separarse la IP pública del cliente de las obtenidas a través de posibles redes locales. */


    if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {

/* Se abre la matriz de IP's obtenidas de $_SERVER['HTTP_X_FORWARDED_FOR']. */

      $ListaDeip = explode (", ", $_SERVER['HTTP_X_FORWARDED_FOR']);

/* Si ya hay contenido en $ip, se añade a la matriz. */

      if ($ip) {

        array_unshift($ListaDeip, $ip);

        $ip = 0;

      }

/* Se eliminan IP's privadas, procedentes de posibles redes locales, así como la dirección de bucle local.

Cuando se encuentra una IP pública (externa) se devuelve como resultado de la función. */


      foreach ($ListaDeip as $direccion) if (!eregi("^(192\.168|172\.16|10|224|240|127|0)\.", $direccion)) return $direccion;

    }

/* Si no había contenido en $_SERVER['HTTP_X_FORWARDED_FOR'] se devuelve la IP obtenida mediante $_SERVER['REMOTE_ADDR']. */

    return $ip ? $ip : $_SERVER['REMOTE_ADDR'];

  }

?>

Como podemos ver el script es bastante sencillo y no pretendo explicarlo con mas detalles ya que en los comentarios queda mas que claro, ademas si sabemos algo de php esto no sera mayor problema.
Y bueno ahora lo que necesitamos es el script que determinara el pais de la direccion ip:
determinarPais.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
<?php

//Conectamos y seleccionamos la base de datos

  $conexion=mysql_connect ("localhost", "root", "123456")or

  die("No se puedo conectar con la base de datos");

  $base=mysql_select_db("phpmexic_pruebas", $conexion)or

  die("Problemas para seleccionar la base de datos");




/* Se incluye el archivo que contiene la función para obtener la IP del cliente. */

  include ("obtenerIP.php");

/* Se obtiene la IP del cliente, en el formato típico: "xxx.xxx.xxx.xxx". */

  $direccionReal=obtenerIPCliente();

/* Se convierte la IP a valor numérico. */

  $direccionNumerica=ip2long($direccionReal);

/* Se localiza el registro que corresponde a la ip numérica. */

  $consulta="SELECT countryCode2, countryName FROM ipCountry WHERE ipStart<=$direccionNumerica AND ipEnd>=$direccionNumerica;";

  $hacerConsulta=mysql_query($consulta, $conexion);

/* Se recuperan los datos de "código del país de dos letras y nombre del país. */

$datosDePais=mysql_fetch_array ($hacerConsulta);

  $codigoDePais=strtolower($datosDePais["countryCode2"]);

  $nombreDePais=$datosDePais["countryName"];

/* Se obtiene el nombre de la imagen de la bandera del país. */

  $nombreDeImagen="imagenes/banderas/".$codigoDePais.".gif";

/* Se muestran los resultados. */

  echo ("El pais que corresponde a la IP $direccionReal es: $nombreDePais. ");

  echo ("<IMG SRC='$nombreDeImagen' ALT='$nombreDEPais'>");

/* Se liberan recursos y se cierra la BBDD. */

 // mysql_free_result ($hacerConsulta);

 

  mysql_close ($conexion);

?>

En primer lugar nos conectamos con la base de datos, despues incluimos la funcion que creamos destinada a obtener la ip del cliente. Usando esta funcion se obtiene la IP de la variable $direccionReal. Esta IP esta en formato tipico IPv4, es decir cuatro valores entre 0 y 255, separados por puntos. Este valor se almacena como una cadena.
Sin embargo, los rangos de IP’s que tenemos en la tabla de MySQL estan almacenados como valores numericos, asi que necesitariamos convertir la cadena con la IP de la conexion a un valor numerico. Para estos casos PHP implementa la funcion ip2long(), que recibe una cadena representando una IP y la transforma a un valor numerico es decir:

1
2
3
4
5
<?PHP
$ip=192.168.1.254
$IPNumertica=ip2long($ip);
echo $ip;
?>

Como resultado tendriamos en pantalla 1921681254 que equivale a la ip que le pasamos la cual es 192.168.1.254
Tambien tenemos la funcion long2ip() que lleva acabo el cometido inverso, recibe un valor de tipo long y devuelve una cadena con una IP.
Una vez convertida la IP a su correspondiente valor numerico, tenemos que localizar en la tabla un registro en el que el limite inferior del rango sea menor o igual al valor obtenido y el limite superior sea mayor o igual a dicho valor. Para ello creamos la consulta:

1
2
3
$consulta="SELECT countryCode2, countryName FROM ipCountry
WHERE ipStart<=$direccionNumerica
AND ipEnd>=$direccionNumerica;"
;

Y bueno todo lo que sigue despeus de esto no lo pienso explicar ya que esta mas que claro.
He subido el script para que lo prueben dando clic aqui
Tambien he dejado el archivo .sql de la base de datos de ip para aquellos que quieran importar la base de datos ya directamente a mysql, esto lo hago por que en algunos hostings tienen limitada la memoria para el interprete de php por lo cual si intentan ejecutar el script de php que pasa los datos del archivo CSV sature la memoria y no logren importar nada, aqui la soluicion mas viable seria importar el archivo sql desde la consola de comandos de SQL mediante ssh
Archivo.sql
Tambien dejo un archivo comprimido en formato .tar que contiene todas las banderas de los paises para mostrar al igual que el script completo:
Clic para descargar
PD. para aquellos que usan windows necesitan tener winrar instalado para descomprimir dicho archivo.
Saludos.

Opina | Más notícias sobre General, Internet, Programacion, php, , , ,



Mapcity te dice quién te llama por Twitter

Por th3r0rn | 7 de November de 2009

Mapcity-Twitter_f

Mapcity sigue presentando servicios que hacen uso de Twitter como canal de comunicación, y ahora lanzaron una nueva funcionalidad que permite identificar quién te llama por medio del número telefónico.

Para utilizarla primero debes ser follower de Mapcity en Twitter y esperar a que ellos se conviertan en follower tuyo. Una vez que esto suceda podrás consultar por un número de red fija mandando un mensaje directo a Mapcity de la siguiente forma:

d mapcity telefono 5551234

En unos segundos recibirás un mensaje directo a tu cuenta de Twitter, con la información relacionada con el dueño de la línea y un enlace que te llevará al mapa con la ubicación física donde esa línea se encuentra registrada.

Una interesante funcionalidad que a más de alguno le podrá servir, en una de esas logras identificar al dueño de la línea que tiene la mala costumbre de llamarte mientras te encuentras en los brazos de Morfeo.

Visto en Fayerwayer

Opina | Más notícias sobre Internet, twitter



Feliz cumpleaños c0dex__!

Por th3r0rn | 14 de October de 2009 |6 comentarios

JAJA, no se cuantas veces he felicitado por ser su cumpleaños a mi compa c0dex__ pero pues este año no sera la excepcion, asi que Bueno no queda mas que felicitarte y desearte que cumplas muchoas años mas y continues programando en JS u,u para que sea un buen Javascriptero y KDERO DE CORAZON!
pastel de c0dex

Opina | Más notícias sobre Amigos, General,



Validar fechas con PHP

Por th3r0rn | 6 de October de 2009

Hola, ahora vamos a conocer como podemos validar las fechas en PHP, para esto emplearemos el uso de la funcion checkdate(), que se emplea para determinar si una fecha es correcta o no. Esto viene al caso cuando la fecha la introduce un usuario en un formulario. Imagine que el usuario, por error, introduce 30 de febrero Como todos sabemos Febrero solo cuenta con 28 dias, lo normal es que, apartir de nuestro script empiece a trabajar con esta fecha, se produzcan errores o la aplicacion no devuelva los resultados esperados. Veamos como esta funcion puede ayudarnos a evitar este tipo de problemas. Le pasaremos tres parametros numericos, que representan el mes, el día y el año de la fecha que queremos comprobar. Si es correcta, la funcion nos devolvera un valor logico true. Si no lo es, nos devolvera un false.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?php
$dia=30;
$mes=2;
$anio=2003;
echo"la fecha $dia/$mes/$anio";
if

    (checkdate($mes,$dia,$anio)){
        echo"es correcta<br>";
    }
    else
    {
        echo "no es correcta<br>";
    }
    $dia=31;
    $mes=3;
    $anio=2006;
   
    echo"la fecha $dia/$mes/$anio";
    if
    (checkdate($mes,$dia,$anio))
    {
        echo"es correcta<br>";
    }
    else
    {
        echo"no es correcta<br>";
    }
    ?>

El resultado final de este script seria el siguiente:
la fecha 30/2/2003 no es correcta
la fecha 31/3/2006 es correcta

Como se ve esta funcion es muy sencilla y nos puede ayudar en mucho.
Saludos.

Opina | Más notícias sobre Programacion, desarrollo web, php



Cambios en el protocolo MSN permite ver contactos en estado “No conectado” / “Invisible”

Por th3r0rn | 27 de September de 2009 |10 comentarios

Según se puede leer en algunos foros y listas de correo en estas últimas semanas, parece ser que Microsoft está realizando cambios en su protocolo de mensajería instantánea “MSN”, provocando algunos problemas y comportamientos anómalos en determinados clientes de messenger. Lo que nos llama la atención y suponemos es fruto de esos cambios realizados al protocolo MSN, es que con determinadas versiones de algunos clientes de mensajería, es posible averiguar que contactos se encuentran en estado “No conectado” o “Invisibles”. Según las pruebas realizadas en principio no se pueden enviar mensajes a los contactos invisibles.

Cliente y Versión probados que actualmente identifican el estado “No conectado” / “Invisible”:

- Emessene 1.5 (GNU/Linux) <-- tambien con el emesene de windows
- Amsn 0.97.2 (Windows / GNU/Linux)
- Amsn 0.98b (Actual SVN para GNU/Linux)
- Kopete 0.12.5 (GNU/Linux)
-Parlingo (Este cliente es para los Ipods touchs)
- Pidgin 2.6.2 (GNU/Linux; Este cliente directamente los muestra como conectados)

Kopete 0.12.5, al conectar a la red MSN muestra una ventana por cada contacto en dicho estado con un mensaje similar a este:

1
The user XXXX is currently not signed in. Messages will not be delivered

Si buscamos esos contactos en la lista podremos ver que salen en color gris pero con la mariposa de MSN a todo color, de poner el puntero del ratón sobre ella se verá un mensaje como el de la imagen mostrando su estado.
emesene
visto en busindre

Opina | Más notícias sobre Software, ,



Comprobar si un archivo ya existe en el servidor con PHP

Por th3r0rn | 26 de September de 2009

En el post pasado puse como cargar archivos al servidor usando PHP. Ahora lo que quiero mostrar es como hacerle para comprobar si ya existe un archivo en el servidor, es decir, si un usuario carga una foto llamada MiFoto.jpg se quedara guardada en el servidor con tal nombre, pero que pasa si otro usuario sube una foto justamente con el mismo nombre? pues esto eliminaría la actual para remplazarla por esta, para solucionar este tipo de problemas PHP incorpora la funcion file_exists Esta funcion nos ayuda para saber si ya existe un archivo en el servidor, su uso es muy sencillo, recibe como argumente el nombre del archivo a comprobar con todo y la ruta.

1
2
3
4
5
6
7
8
9
10
<?PHP
$archivo = "/home/th3r0rn/www/archivo.txt";
if (file_exists($archivo)){
echo "El Archivo ya existe en el servidor, intente con un nombre diferente";
}
else
{
echo "El Archivo no existe, usted puede cargar este archivo";
}
?>

Esto lo podriamos implementar en un script que cargue archivos al servidor como el siguiente:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?PHP
$size=$_FILES["fichero"]["size"];
$type=$_FILES["fichero"]["type"];
$tmp=$_FILES["fichero"]["tmp_name"];
$nombre=$_FILES["fichero"]["name"];


if ($size>=100000){
        die("el archivo es muy grande");
    }
    elseif
    ($type!="image/jpeg"){
        die("el archivo no esta en formato jpg");
    }
   
elseif(file_exists("/home/th3r0rn/www/php/ficheros/ficheros/$nombre")){
    die("el archivo ya existe en el servidor");
}
   
    if
    (move_uploaded_file($tmp,"ficheros/$nombre")){
        echo"archivo cargado";
       
    }
    else
    {
        echo"el archivo no se cargo";
    }
    ?>

Como vemos en la linea 16 es la que comprueba que el archivo no exista.

1
2
3
elseif(file_exists("/home/th3r0rn/www/php/ficheros/ficheros/$nombre")){
    die("el archivo ya existe en el servidor");
}

La variable $nombre que pongo al final, toma como valor el nombre del archivo que envia el usuario. :)

Opina | Más notícias sobre Programacion, php,



Cargar archivos con php

Por th3r0rn | 23 de September de 2009 |2 comentarios

Hola, ya estoy de regreso, ahora vamos a ver como se cargan archivos con PHP.
Esto muchas personas pueden pensar que es muy dificil, pero esto no es del todo cierto, PHP es un lenguaje de programacion preferido por muchos webmasters debido a su simplicidad y eficacia para la elaboracion de aplicaciones webs en tan poco tiempo.
Muy bien, en primero tenemos vamos a ver paso a paso como se hace esto de una forma muy simple y otra un poco mas elaborada.
En primero tenemos que tener nuestro formulario en html para enviar nuestro archivo al script que lo procesara en el servidor:

1
2
3
4
5
6
7
8
9
<html>
<body>
<form action="sube3.php" method="post" enctype="multipart/form-data">
File to upload
<input type="file" name="file" id="file">
<input type="submit" name="send" value="send"
</form>
</body>
</html>

Bien, como podemos ver no es nada dificil, es un simple formulario en html que nos permite cargar el archivo y mediante el metodo POST lo mandamos a sube.php, dicho script que procesara el archivo en nuestro servidor:
sube.php

1
2
3
4
5
6
<?PHP
$file=$_FILES["file"]["tmp_name"];
$name=$_FILES["file"]["name"];
move_uploaded_file($file,"ficheros/$name");
echo"uploadedd";
?>

Bien, este es el script que sube nuestros archivos al servidor, lo explocare detalladamente:
En primero creamos una variable llamada $file a la cual le asignamos el valor de la matriz $_FILES["file]["tmp_name"];
es decir, al igual que $_POST, $_FILES es una matriz que en este caso toma el elemento “file” el cual estamos enviando mediante nuestro html:

1
<input type="file" name="file"> <-- observe la propiedad name, le he asignado el nombre file por lo cual mi matriz al declararla la declaro

$_FILES["file"]
si en mi html en lugar de tener el nombre file pusiera un nombre como por ejemplo:

1
<input type="file" name="ARCHIVO">

, llamaria a mi matriz:
$_FILES["ARCHIVO"]["tmp_name"];
Ahora bien, que es ["tmp_name"] ???

Bueno, observe la siguiente tabla de propiedades:
error: Indica si se ha producido un error en el envio de fichero. Si todo ha ido correctamente, esta propiedad almacena el valor 0. Si se ha producido un error el valor es 1.

name: El nombre del archivo, tal como lo tiene almacenado el usuario en su disco duro.

tmp_name: Es el nombre temporal que usa PHP para la gestion provisional del archivo, hasta que lo almacene en disco del servidor, lo envie por correo electronico a donde corresponda, o cualquier otra accion que le hayamos programado al script.

type: Almacena el tipo de archivo que se ha enviado. Puede ser imagem,audio.video,text plano etc…

size: El peso del archivo en Bytes

Ok, entonces quedamos que en primero, creamos una vairable llamada $file que toma como nombre el valor enviado por el script el cual es file y toma la propiedad tmp_name como elemento para poder procesar con ese nombre temporal el archivo
seguido de esto creamos una variable llamada name:

1
$name=$_FILES["file"]["name"];

en esta variable almacenamos el nombre del archivo que el usuario envia al servidor, es decir. si el usuario envia un archivo llamado foto.jpg
esa variable al imprimirla
echo”$name”; imprimiria en pantalla el nombre del archivo que el usuario envia es decir: foto.jpg
Bien, despues de eso tenemos:

1
move_uploaded_file($file,"ficheros/$name")

Muy bien, seguro te estaras preguntando que diablos es move_upload_file
move upload_file es una funcion nos permite guardar los archivos en nuestro servidor. Recibe dos argumentos separados por coma, el primero corresponde a la propiedad tmp-name del archivo subido y el segundo coresponde al nombre con el que se grabara dicho archivo en el servidor, incluyendo la ruta.
En este caso es muy simple entonces observemos nuevamene:

1
move_uploaded_file($file,"ficheros/$name")

Tal como explico anteriormente esta funcion recibe dos argumentos, el primero es la pripiedad tmp-name la cual he almacenado anteriormente en la variable $file, seguido de esto, ingreso el otro argumento el cual es el nombre del archovo incluyendo la ruta donde quiero que se guarde. es decir “fiechros/$name”
donde ficheros es el directorio donde quiero que se almacene el archivo y donde $name es la variable que almacena la propiedad name es decir, que se grabara con el nombre tal cual lo envie el usuario, osea que si envio una foto llamada foto.jpg en mi servidor se grabara con dicho nombre. Es necesario que para poder guardar este archivo ya tengamos creado nuestro directorio ficheros donde guardare mi archivo enviado.
Despues de esto despliego el mensaje de que el archivo se ha grabado correctamente

1
echo "File uploaded";

Bien, con este simple script ya podemos nuestros ususarios podran subir archivos al servidor en cualquier formato, ya sean videos, imagenes, textos planos, documentos etc..
Pero este tipo de script representa un riesgo a la seguridad, es decir, con este simple script un usuario con malas intenciones nos podria subir una shell en php que le permitan al atacante ejecutar comandos dentro de nuestro servidor y tomar control del mismo, pudiendo colocar un sniffer para capturar todo el trafico de nuestra red o bien poder modificar nuestras paginas webs etc…
Para solucionar esto podriamos hacer un scrip un poco mas elaborado con algunas restrincciones como el que muestro a continuación:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?PHP
if

    ($_FILES["fichero"]["type"]!="image/jpeg")
                                                {
                                            die("the format is not suitable,the format permitted is jpg");
                                        }
               
elseif
    ($_FILES["fichero"]["size"]>=1745137) {
                       
                            die("File very large, The maximun size permitted is 1745137 Bytes!");
                        }

$fichero=$_FILES["fichero"]["tmp_name"];
$nombre=$_FILES["fichero"]["name"];
echo"<img src=\"ficheros/$nombre\">"; // Show Image
    if
    (@move_uploaded_file($fichero,"ficheros/$nombre")) //Save Image
        {
            echo"File uploaded";
                    }
                    else
                       {
                        echo"Could not load file";
                   
                        }

?>

Bien, en primero lo que buscamos en este script es que solo almacene archivos que esten en formato .jpg y que cuyo tamaño no sea igual o mayor a los 1745137 Bytes.
Lo que hacemos en primer lugar es emplear un if que compruebe si el archivo que envio este en formato jpg:

1
2
3
4
5
6
if

    ($_FILES["fichero"]["type"]!="image/jpeg")
                                                {
                                            die("the format is not suitable,the format permitted is jpg");
                                        }

Como vemos, hacemos uso de la propiedad type para indicarle por medio de un if que si el archivo que envio el usuario esta en otro formato que NO SEA .jpg ejecute las instrucciones que se encuentran entre las llaves:

1
2
3
{
                                            die("the format is not suitable,the format permitted is jpg");
                                        }

Bien, como vemos, la instrccion que se encuentra entre las llaves imprimiria el mensaje al usuario de que el formato en el que lo envio no esta permitido y que el formato permitido es jpg.
Seguramente te estaras preguntando pero por que ese mensaje lo muestras con esa funcion llamada die y no con un simple echo? Simple, la funcion die lo que hace es terminar con la ejecucion del script de manera que lo que sigue despues de esa funcion no se ejecutara, es decir, die recibe como argumente una cadena de texto la cual sirve para avisarle al usuario que la accion no se pudo completar y seguido de mostrar este mensaje, esta funcion detendra por completo la ejecucion del script de modo que lo que hay despues de esas llaves no se ejecutara ;).
Despues tenemos un elseif:

1
2
3
4
5
elseif
    ($_FILES["fichero"]["size"]>=1745137) {
                       
                            die("File very large, The maximun size permitted is 1745137 Bytes!");
                        }

Aqui comprobamos por medio de la propiedad size que el archivo no sea mayor o igual a los 1745137 Bytes, si el archivo es mayor o igual a los 1745137 Bytes entonces detendremos la ejecución del script no sin antes mostrarle el mensaje al usuaio de que el archivo es muy grande y que el tamaño maximo permitido es de 1745137 Bytes!.
Despues de esto tenemos:

1
2
$fichero=$_FILES["fichero"]["tmp_name"];
$nombre=$_FILES["fichero"]["name"];

Aqui creo que esta mas que claro, creamos 2 variables, la primera llamada $fichero a la cual como valor le asignamos la matriz FILES que tiene almacenado como elemento a la propiedad tmp_name. La segunda variable llamada $nombre de igual forma asignamos la matriz FILES donde tiene almacenado como valor el nombre del archivo exacto.
Posteriormente lo que hago es mostrar la foto que hemos cargado, algo parecido a lo que hacen los de http://imageshack.us :

1
echo"<img src=\"ficheros/$nombre\">"; // Show Image

Aqui como vemos lo muestro con un echo, en el cual ejecuto instrucciones en html usando la funcion img la cual pongo como valor en su src la variable el directorio fiecheros segudi del nombre del archivo que he cargado, entonces si yo cargara una foto llamada ALICIA.JPG en el interprete de html regresado por el servidor esto se veria asi:

1
<img src="ficheros/alicia.jpg">

Esto por que estoy mostrando la foto que he cargado y que se encuentra almacenada en el directorio ficheros con el nombre que la he cargado llamado ALICIA.JPG
Despues tenemos:

1
2
3
4
5
6
7
8
9
10
if
    (@move_uploaded_file($fichero,"ficheros/$nombre")) //Save Image
        {
            echo"File uploaded";
                    }
                    else
                       {
                        echo"Could not load file";
                   
                        }

observemos que he puesto un if esto por que? pues por que la funcion move_upload_file() devuelve un valor logico true si ha podido grabar el archivo adecuadamente en el servidor y un valor false si no se ha podido grabar. Es por esto que he empleado el uso de un IF, tambien nos estaremos preguntando por que diablos he puesto un @ antes de la funcion? bien, esto es por que al anteponer este operador, lo que le estamos diciendo al interprete es que si esta funcion da un error, no lo muestre y continué con la ejecucion del script.
seguido de este mostramos un mensaje avisándole al usuario de que el archivo se cargo correctamente y en caso contrario le avisamos lo contrario.
Como vemos no es nada complicado, lo complicado es la manera en la que lo explico :( pero realmente no tiene nada de dificil.
Saludos!

Opina | Más notícias sobre Programacion, php, ,



Instalar curl para php en debian lenny

Por admin | 24 de August de 2009 |1 comentario

Pues hace poco un amigo me mostro algo de curl cosa que ni enterado estava y la verdad me llamo mucho la atension, para poder instalr curl en debian es muy facil.
Primero que nada tenemos que tener instalado cur, si no lo tenemos pues hay que instalarlo:

1
apt-get install curl

y para instalar curl de php:

1
php5-curl

ya que lo tenemos solo necesitamos descomentar extension=curl.so Si no lo tenemos como por ejemplo en mi caso no lo tenia solo lo agregue.
editamos con nano:

1
nano /etc/php5/cgi/php.ini

y buscamos si no tenemos ya la extension, en caso de no tenerla como dije anteriormente hay que agregarla.
Ahora bien, hasta aqui ya bastaria con tenerlo instalado y bien configurado, solo necesitariamos resetear nuestro web server ya sea apache, cherokee etc.. Yo la verdad no pude hacer que levantara la extension por lo cual tube que reiniciar por completo mi sistema operativo.
Despues que reinicie verifique en el script phpinfo que para estas alturas supongo ya saben que es. y encontre que curl ya se encontraba activo.
Hasta aqui es todo. Saludos =)

Opina | Más notícias sobre Linux, Programacion, , ,



ENLI 2009

Por admin | 1 de August de 2009 |6 comentarios

El encuentro nacional de linux y software libre (ENLI) ya se aserca y el dia de hoy lanazaron su video promocional con imagenes muy buenas del enli pasado, este es un gran evento sobre Linux y software espero podre ver a muchas caras nuevas este año.

Opina | Más notícias sobre Linux, Software Libre,



Como hackear una red inalambrica con windows xp o vista

Por admin | 31 de July de 2009 |13 comentarios



Pues la verdad no me gusta mucho este tema de hackear una red inalambrica en windows ya que se me hace una tonteria, pero lo voy a poner por que asi mejora mi PageRnak  xD

Primero que nada no soy el autor de este texto y no me comprometo por las acciones que se realizen con este documento.

El articulo esta enfocado con fines educativos.

1. ¿Qué necesitamos para hacking wireless en Windows?

Ya se lo ha mencionada varias veces, pero vale la pena repetir. La marca de la tarjeta inalambrica que usemos es irrelevante, lo que realmente importa es su chipset.

Lo importante de una tarjeta WIFI es el chipset. Dá igual la marca, lo que en realidad importa es el chipset. En esta página podéis consultar los chipsets de vuestras tarjetas:


http://linux-wless.passys.nl/

Entramos al link que nos da el amigo Uxio para averiguar cual es el chipset que usa nuestra tarjeta.

Después comprobad lo que se puede hacer con vuestro chipset:

http://hwagm.elhacker.net/htm/traduccion.htm#q080

Le hacemos caso y entramos al link para comprobar lo que puede hacer nuestro chipset y si es compatible con Windows. (Si no lo es pues ni modo tendremos que usar linux.
En mi caso el chipset de mi tarjeta es una atheros ar5005g, perfectamente compatible.

2. Descargando e instalando los drivers

http://hwagm.elhacker.net/ultimos.htm
En mi caso el primer link funcionará a la perfección.:

Para instalar los drivers en windows, un manual muy detallado aquí:


http://hwagm.elhacker.net/windriver/monitordriver.htm

No olvidar hacer respaldo de los drivers anteriores! Solo por si acaso. Procedemos a seguir el manual.

Listooooo, ya tenemos instalados los drivers, podemos empezar. :

3. Bajando y usando la suite aircrack

Procedemos a bajar la suite aircrack:

http://hwagm.elhacker.net/aircrack-ng.htm

Esta vez utilizaremos la Aircrack-ng 0.9.3, para Windows recuerden :¬¬

La suite viene comprimida, la descomprimimos en cualquier lugar, ingresamos la carpeta bin, ejecutamos el Aircrack-ng GUI.exe, este será nuestro centro de mando.

Ahora vamos a la pestaña Airodump-ng, Airodump es el programa que nos permitirá capturar. Pulsamos “Launch” para iniciar el Airodump.

Nos preguntará si necesitamos instalar los drivers de omnipeek, le decimos que no porque ya los tenemos instalados.

Ahora saldrá otro mensaje diciéndonos que nos falta los archivos PEEK.DLL y PEEK5.SYS, no hay problema, le damos clic a Yes y nos lleva a la página para bajarlos:

http://www.tuto-fr.com/tutoriaux/crack-wep/fichiers/wlan/en-index.php

Especificamente la que dice peek.zip, aqui el link directo:

http://www.tuto-fr.com/tutoriaux/crack-wep/fichiers/wlan/winxp/Peek.zip

Una vez que tenemos el zip lo descomprimimos y copiamos los archivos en la carpeta bin.

4. Capturando

Ahora sí lanzamos de nuevo el Airodump:

Explicaré cada una de las opciones que nos da:

Primero nos sale una lista con las tarjetas de red que tengamos instaladas:

Known network adapters:

11  Atheros AR5005G Cardbus Wireless Network Adapter
 2  NIC Fast Ethernet PCI Familia RTL8139 de Realtek

Network interface index number  ->
En mi caso salen la Atheros y la Realtek que es para la red cableada.
Escojemos el numero de la tarjeta correspondiente, en mi caso "11" y
Enter.
Interface types:  'o' = HermesI/Realtek
                                  'a' = Aironet/Atheros

Network interface type (o/a)  ->
Nos pide la interface, en mi caso "a" por Atheros. Enter.

Channel(s): 0 = hop on 2.4Ghz channels, -1 = hop on 5Ghz channel,
            1, 7, 13, 2, 8, 3, 14, 9, 4, 10, 5, 11, 6, 12, 36, 40,
            44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120,
            124, 128, 132, 136, 140, 149, 153, 157, 161, 184, 188,
            192, 196, 200 ->

Los canales que podemos capturar, si sabemos en que canal está siendo
transmitida nuestra red inalámbrica pues lo especificamos, sino podemos
especificar para que capture varios a la vez con 0 y -1.

(note: if you specify the same output prefix, airodump will resume
 the capture session by appending data to the existing capture file)

Output filename prefix        ->

Aquí especificamos el nombre del archivo en donde almacenaremos nuestra
captura, en mi caso le puse "captura" :xD Cabe mencionar de que si
especificamos el mismo nombre de un archivo que ya existe la captura
será continuada y se agregaran los datos al archivo.

(note: to save space and only store the captured WEP IVs, press y.
 The resulting capture file will only be useful for WEP cracking)

Only write WEP IVs (y/n)      ->

Esta opción... pongámoslo así: Si eliges "y" el archivo que se generará
será de extención .ivs (captura.ivs" y solo guardará los datos
necesarios para crackear la clave wep. Si le ponemos "n" pues en el
archivo se guardará todo lo que se capture, paquetes y todo. Esta
opción se da con el objeto de ahorrar espacio en disco si lo único que
vamos a hacer es crackear la wep, pero como necesitamos los otros datos
para más adelante le ponemos "n". Enter y empezamos a capturar.


En la parte de arriba nos dirá los AP que estén al alcance, el BSSID
será la mac, y en donde dice ENC (Encriptación) vemos que nos sale OPN,
eso significa que es una red abierta, si tuviera clave Wep diría WEP.
En la parte de abajo vemos las estaciones que están conectadas al AP
con sus respectivas macs y todo lo que se captura se está llendo al
fichero "captura.cap" dentro de la carpeta bin de la suite aircrack.

Para cerrar el Airodump aplastamos Ctrl+C

5. Sacando la wep

Para
sacar una clave wep normalmente necesitamos capturar al menos un millon
de ivs, sin embargo a veces lo podemos lograr con menos (o con más,
depende de la dificultad de la clave).

Una vez que tengamos al
pelo nuestro archivo .ivs o .cap con las suficientes ivs vamos de nuevo
al aircrack-ng GUI en la pestaña de "Aircrack-ng", ponemos examinar y
escogemos nuestro archivo, para empezar el ataque ponemos Launch

Mi caso es un caso especial porque he usado una wep muy facil que he
podido sacarla con 79353 ivs, esto por motivos de tiempo, pero nunca se
conformen con tan poco. Si el archivo guarda informacion de diferentes
AP pues nos dara a escoger, en mi caso pondré el 1 y empezamos el
ataque y con algo de suerte:

Hemos encontrado nuestra primera clave wep :

6. Recordando nuestras claves con WZCook

Otra de las
pestañas en el Aircrack-ng GUI es el WZCook, este no es un programa
para hacking wireless, más bien es una herramienta para recordar la
clave wep o wpa de las redes a las que alguna vez en nuestra vida nos
hemos conectado con windows (siempre y cuando no hayamos formateado
claro está).

En caso de que sea una red abierta (sin encriptación) nos pondrá 00000000, etc...

Esta ha sido una pausa para seguir explicando el resto, siempre es bueno tener en cuenta esta utilidad muy útil.
7. Desencriptando nuestra captura

Ahora introducimos el uso de otro programa que nos servirá de mucho en el mundo del hacking wireless, este es el ethereal

http://www.ethereal.com/

No se por qué pero parece que la página no va Pero bueno les he subido el rar aquí:

http://rapidshare.com/files/116436179/ethereal-setup-0.99.0.rar
Ethereal es un programa que nos servirá para analizar los paquetes que
hemos capturado. Todo el trafico de la red ante nuestros ojos sí!
Recuerdan nuestro archivo "captura.cap" contiene información sobre la
red, pero esperen... está encriptada! eso quiere decir que aunque
abramos nuestro archivo con el ethereal los paquetes no serán legibles,
intentemos una vez teniendo instalado el ethereal abrir nuestro archivo

"captura.cap"

mmm... nada que ya no hemos visto... A lo mucho podemos ver el ssid de la red y las mac del ap y los clientes.

Ahora
vamos a desencriptar nuestro archivo para hacerlo legible, para eso
usaremos otras de las pestañas el Aircrack-ng GUI, la llamada Airdecap

Airdecap
nos permitirá desencriptar nuestro archivo de captura, en el cuadro de
texto de Filename ponemos la direccion de nuestro archivo
"captura.cap". Tenemos la opcion de especificar el ESSID o el BSSID en
caso de que nuestro archivo contenga info de algunas redes. En la parte
de abajo escogemos si es calve wep o wpa y por último escribimos la
clave en formato hexadecimal. Recordemos que el aircrack nos la da de
dos formas, la hex y ascii, esta vez utilizaremos la hex de más arriba
(6E:75:65:76:65), ponemos "launch" y el airdecap hará su trabajo.

En Number of decrypted WEP packets nos pondrá cuantos paquetes se han
desencriptado con éxito, si todo va bien debería ser el mismo número de
Total number of WEP data packets, aunque si hemos capturado datos de
diferentes redes nos pondra un numero menor, si te da 0 es porque has
puesto mal la clave.

Si ha salido bien vemos en la carpeta donde
estaba el archivo "captura.cap" y notaremos que se ha generado otro
llamado "captura-dec.cap", que es precisamente el archivo de captura ya
desencriptado.

8. Solucionando DHCP deshabilitado

¿Qué es dhcp deshabilitado? Bueno, creo que este es el tema que más se habla dentro del mundo del hacking wireless.

DHCP (sigla en inglés de Dynamic Host Configuration Protocol) es un
protocolo de red que permite a los nodos de una red IP obtener sus
parámetros de configuración automáticamente. Se trata de un protocolo
de tipo cliente/servidor en el que generalmente un servidor posee una
lista de direcciones IP dinámicas y las va asignando a los clientes
conforme éstas van estando libres, sabiendo en todo momento quién ha
estado en posesión de esa IP, cuánto tiempo la ha tenido y a quién se
la ha asignado después.

http://es.wikipedia.org/wiki/DHCP

El
que el dhcp esté deshabilitado significa que aunque tengamos bien la
clave wep y nos podamos asociar a la red, está no nos asignará
automáticamente una dirección IP, la tendremos que configurar nosotros
mismos manualmente.

Les menciono que le mejor manual sobre dhcp deshabilitado es el de Uxío, y se encuentra aquí:

http://www.elhacker.net/solucion-dhcp-deshabiitado.html

Sin embargo hace uso de linux, por lo que yo haré aquí una adaptación del manual para que sea 100% Windows
¿Cómo reconocemos que la red tiene dhcp deshabilitado? Fácil, nos
podemos asociar a la red pero no nos dara ip, por lo que nos saldrá el
famoso "Conexión limitada o nula":

Ok, no hay problema, para todo hay solución. :
Recordemos que tenemos el archivo captura-dec.cap que tiene los
paquetes ya desencriptados. Vamos a analizarlo con el Ethereal.
Simplemente le damos doble clic al archivo (al instalar el Ethereal
asocia los archivos .cap al programa automáticamente).

Voy a
tomarme el atrevimiento de postear una de las imagenes del manual de
Uxío, al fin de cuentas el ethereal de Windows es lo mismo que el de
linux:

El amigo Uxío nos lo explica muy bien, yo no podría haberlo hecho
mejor. Creo que no tiene sentido seguir escribiendo el resto del manual
porque ya lo tenemos bien explicado, el resto en windows, recuerden el
manual está aquí: http://www.elhacker.net/solucion-dhcp-deshabiitado.html

El Look@lan aquí:

http://www.lookatlan.com/

9. Filtrado Mac

Yo les doy todo masticado:

En redes de computadoras la dirección MAC (Medium Access Control
address o dirección de control de acceso al medio) es un identificador
de 48 bits (6 bytes) que corresponde de forma única a una tarjeta o
interfaz de red. Es individual, cada dispositivo tiene su propia
dirección MAC determinada y configurada por el IEEE (los últimos 24
bits) y el fabricante (los primeros 24 bits) utilizando el OUI. La
mayoría de los protocolos que trabajan en la capa 2 del modelo OSI usan
una de las tres numeraciones manejadas por el IEEE: MAC-48, EUI-48, y
EUI-64 las cuales han sido diseñadas para ser identificadores
globalmente únicos. No todos los protocolos de comunicación usan
direcciones MAC, y no todos los protocolos requieren identificadores
globalmente únicos.
http://es.wikipedia.org/wiki/Direcci%C3%B3n_MAC

Para saber cual es la dirección mac de nuestros dispositivos de red haremos desde el símbolo del sistema:
WWW

« : 04-Septiembre 06:12:54 am (Jueves) »


Bueno pues me he decido a hacer este manual porque veo que la mayoría de info. que se puede encontrar es más para linux, y como no me gusta la discriminación Tongue

Este manual está pensado para novatos ok? :xD

1. ¿Qué necesitamos para hacking wireless en Windows?

Ya se lo ha mencionada varias veces, pero vale la pena repetir. La marca de la tarjeta inalambrica que usemos es irrelevante, lo que realmente importa es su chipset.

Citar
Lo importante de una tarjeta WIFI es el chipset. Dá igual la marca, lo que en realidad importa es el chipset. En esta página podéis consultar los chipsets de vuestras tarjetas:

http://linux-wless.passys.nl/

Entramos al link que nos da el amigo Uxio para averiguar cual es el chipset que usa nuestra tarjeta.

Citar
Después comprobad lo que se puede hacer con vuestro chipset:

http://hwagm.elhacker.net/htm/traduccion.htm#q080

Le hacemos caso y entramos al link para comprobar lo que puede hacer nuestro chipset y si es compatible con Windows. (Si no lo es pues ni modo tendremos que usar linux. Sad Tongue)

En mi caso el chipset de mi tarjeta es una atheros ar5005g, perfectamente compatible. Cheesy

2. Descargando e instalando los drivers

Llegado este punto debemos ponernos a buscar los drivers:

http://hwagm.elhacker.net/ultimos.htm

En mi caso el primer link funcionará a la perfección. :Smiley

Para instalar los drivers en windows, un manual muy detallado aquí:

http://hwagm.elhacker.net/windriver/monitordriver.htm

No olvidar hacer respaldo de los drivers anteriores! Solo por si acaso. Procedemos a seguir el manual. Grin

Listooooo, ya tenemos instalados los drivers, podemos empezar. :Smiley

3. Bajando y usando la suite aircrack

Procedemos a bajar la suite aircrack:

http://hwagm.elhacker.net/aircrack-ng.htm

Esta vez utilizaremos la Aircrack-ng 0.9.3, para Windows recuerden :¬¬

La suite viene comprimida, la descomprimimos en cualquier lugar, ingresamos la carpeta bin, ejecutamos el Aircrack-ng GUI.exe, este será nuestro centro de mando.

Ahora vamos a la pestaña Airodump-ng, Airodump es el programa que nos permitirá capturar. Pulsamos “Launch” para iniciar el Airodump.

Nos preguntará si necesitamos instalar los drivers de omnipeek, le decimos que no porque ya los tenemos instalados. Tongue Ahora saldrá otro mensaje diciéndonos que nos falta los archivos PEEK.DLL y PEEK5.SYS, no hay problema, le damos clic a Yes y nos lleva a la página para bajarlos:

http://www.tuto-fr.com/tutoriaux/crack-wep/fichiers/wlan/en-index.php

Especificamente la que dice peek.zip, aqui el link directo:

http://www.tuto-fr.com/tutoriaux/crack-wep/fichiers/wlan/winxp/Peek.zip

Una vez que tenemos el zip lo descomprimimos y copiamos los archivos en la carpeta bin.

4. Capturando

Ahora sí lanzamos de nuevo el Airodump:

1
ipconfig/all

(Anotamos la de la wireless, solo por si acaso.

Ahora en la seguridad de redes inalámbricas existe el Filtrado Mac, lo que quiere decir que el ap solo dejará asociarse a él equipos específicos que cuenten con “cierta” dirección mac.

Pero ya lo dije, para todo hay solución.

http://www.ntsecurity.nu/toolbox/etherchange/

Ethercange es una pequeña utilidad que nos ayudará a cambiar nuestra mac. simplemente lo ejecutamos y nos mostrará los dispositivos de red que tenemos:

1
2
EtherChange 1.1 - (c) 2003-2005, Arne Vidstrom
- http://ntsecurity.nu/toolbox/etherchange/

0. Exit
1. NIC Fast Ethernet PCI Familia RTL8139 de Realtek
2. Atheros AR5005G Cardbus Wireless Network Adapter

Pick a network adapter:
En mi caso escojo el número 2, que el de mi atheros.

1
2
3
0. Exit
1. Specify a new ethernet address
2. Go back to the built-in ethernet address of the network adapter

Pick an action:
La opción 1 es para cambiar la mac a la que queramos, la 2 es para regresar a la mac original del dispositivo.

1
Specify a new ethernet address (in hex without separators):

Aquí ponemos la nueva dirección (sin los dos puntos [:]).

¿Cómo saber que direccion mac poner? Pues nos vamos a capturar de nuevo paquetes con el airodump y cogemos una de los clientes, asi de simple, es raro el caso en el que se presenta conflictos por tener la misma mac address que otro equipo en una red.

Autor:Carloswaldo

Opina | Más notícias sobre Hacking, Redes, Seguridad, , , , ,





Sobre nosotros

Diseño basado en MilBits