Recuperar la IP y la MAC mediante un script PHP

Thomas -  
 plefebv -
Hola a todos,

Debo crear, en el marco de mi tfe, una página php dependiente de una base de datos mysql.
Esta página permite a un cliente identificarse.
Lo que permite enviar el identificador, la ip y la mac a la base de datos.

Mi pregunta: estoy buscando un script php que sirva para recolectar la ip y la mac del usuario para enviarlas a la base de datos

Gracias
Configuración: athlon 64 300+, gforce 7900gt, 1,5 go ram, 500 go sata, windows xp, ubuntu

18 respuestas

  1. wAx Mensajes publicados 1596 Fecha de registro   Estado Miembro Última intervención   202
     
    Hola,

    Es importante saber que es imposible conocer la dirección MAC de la máquina que se conecta en cuanto hay cualquier router entre la máquina y el servidor.

    Las direcciones MAC se utilizan para transmitir la información de router a router, desde el puesto cliente hasta el servidor y viceversa cuando el servidor responde.

    Esto significa que la dirección MAC de la máquina que se conecta solo es visible para el primer router (a menudo incluso la 'box' Freebox, Livebox, etc.), después, el segundo intermediario ve los datos que llegan desde la dirección MAC de la box, etc., etc.
    Por lo tanto, el servidor que aloja el sitio ve TODAS las conexiones llegar con la dirección MAC de su router (evidentemente, a menos que la solicitud provenga de la misma red que el servidor mismo).

    Recuperar las direcciones MAC es, por lo tanto, inútil y casi siempre imposible.

    Hasta pronto

    wAx
    35
  2. Ssylvainsab Mensajes publicados 2892 Estado Moderador 825
     
    Hola.

    Para la IP, es la variable:
    $_SERVER['REMOTE_ADDR']

    por ejemplo:
    <?php //mostramos la dirección IP echo $_SERVER['REMOTE_ADDR']; ?>


    Para la dirección MAC, no sé, pero creo que es según los componentes (tarjeta ethernet, wi-fi...) y no el ordenador.

    https://www.php.net/manual/es/reserved.variables.php

    hasta luego
    --
    Sylvain
    12
  3. neo673
     
    wAx tiene toda la razón, es imposible conocer la dirección MAC de la máquina desde un script PHP.

    Si bricolas un poco creando un mini software que envías en cada conexión del cliente como si fuera una cookie, pero que se ejecute en el cliente para pedirle su dirección MAC y la devuelva a tu servidor, entonces podrás divertirte almacenándola en una base de datos SQL y probándola en cada conexión del usuario...

    En otras palabras, por un lado será muy incómodo para el usuario, por otro, una especie de script que se ejecute en el cliente no es realmente genial, y además, buena suerte programando todo eso :-D
    8
  4. omniarchos
     
    Hola a todos,

    al leer este tema, me surgió una pregunta cuya respuesta podría tal vez permitir obtener la dirección MAC del cliente (el último post es cierto que es antiguo, pero siempre puede ser útil para otros).

    El javascript (si he seguido bien los diferentes tutoriales que he leído ^^) se ejecuta en el pc del cliente... ¿un script js puede, por tanto, recuperar la dirección MAC (sin problema de "enrutamiento" ya que está en el mismo pc) y enviarla a una variable? Tal vez podríamos tener acceso a ella, ¿no?
    3
  5. pmag
     
    <?php
    ob_start();
    system("ipconfig /all");
    $mycom=ob_get_contents();
    ob_clean();
    $findme = "físico";
    $pmac = strpos($mycom, $findme);
    $mac=substr($mycom,($pmac+36),17);
    echo $mac;
    ?>

    me devuelve 15-9E-36-F6-06

    ¿no es eso???
    3
    1. SupKawai
       
      Es la MAC del servidor, sin embargo siempre es imposible en PHP recuperar la del cliente.
      0
    2. wAx
       
      ¡Siempre imposible y no cambiará!
      0
    3. Duncan Idaho
       
      ¡Gracias SupKawai, es exactamente lo que estaba buscando! (la dirección MAC del servidor)
      0
  6. jules
     
    Si los clientes que se van a conectar están en la misma LAN, se puede hacer un pequeño script en PHP que lance un comando del sistema.

    $resultado=system("arp -a");

    proporcionará todas las MAC asociadas a las IP que se han conectado al servidor... luego un tratamiento de cadenas de caracteres permitirá encontrar la MAC de una IP en particular.

    Pero esto solo funcionaría en una LAN. Las MAC tienen un significado local.
    2
  7. Usuario anónimo
     
    La dirección MAC está inscrita en la tarjeta de red (ya sea integrada o no en la placa base)
    --
    "El fin del mundo no es para mañana, llegó ayer" (Lapinkiller)
    1
  8. Thomas
     
    La teoría del protocolo ISO la conozco, pero no es lo que estoy pidiendo. En fin, gracias de todos modos.

    Si alguien tiene una idea, siempre estoy aquí.
    1
    1. wAx Mensajes publicados 1596 Fecha de registro   Estado Miembro Última intervención   202
       
      Buenas noches,

      En este caso, conociendo la teoría del proto ethernet y el modelo ISO, ya deberías saber que si tu cliente no está en la misma red física, es imposible obtener la dirección MAC.

      Además, es una información que no llega hasta la capa 7, donde tú trabajas. La IP forma parte de las variables de entorno del servidor web y, por lo tanto, es accesible a través de diversos métodos en PHP. La MAC no es accesible...

      Buena suerte.
      0
    2. mmlpipf
       
      Hola..WAX. Sabes, es cierto desde un punto de vista funcional, pero puede haber matices según yo, si ese es el caso para las direcciones MAC, diría que es válido para las direcciones IP, porque antes de salir de la red, la dirección de la máquina local se mapea a una dirección pública y un número de puerto (el protocolo NAT), y por lo tanto, la dirección IP local no es visible en la red, y aquí se plantea el mismo problema. Yo pienso que es posible conocer la dirección MAC, o bien esta funcionalidad no se tiene en cuenta.
      ¿Qué piensas?
      ¡Gracias!
      0
  9. bud35000 Mensajes publicados 155 Estado Miembro 103
     
    De acuerdo, pero si está en la misma red, podemos recuperar esta dirección MAC con arp -a y este otro comando como nbtstat -a "<ip>".
    Pero me gustaría saber también si hay alguna manera de automatizar esta tarea para registrar las direcciones MAC en una tabla SQL haciendo que correspondan con su IP fija.
    Entonces, ya sea en PHP u otro, pero imagino que existe una consulta que lo permite.

    Con un script por lotes, podemos visualizar a partir de las IP las direcciones MAC correspondientes. ¿Es posible recuperar estos valores en forma de variables?
    1
  10. tchicanos
     
    Hola, ¿alguien podría ayudarme a encontrar un software o un programa en PHP, shell, Perl o incluso Cygwin que me permitiría recuperar una dirección MAC en el puerto de un switch? Este es un proyecto que debo realizar para mi pasantía, pero no tengo idea de cómo proceder. ¡Agradecería un poco de ayuda por favor, gracias de antemano!
    1
  11. Quick
     
    Diría que ustedes no han entendido la cuestión, así que retomemos con calma.
    La dirección MAC es una dirección definida en el componente del PC (ethernet o wifi). Para acceder a ella, no se puede pasar MÁS que por la máquina.
    He leído más arriba que un astuto pensaba que se podría usar JavaScript para recuperar la dirección MAC... y bien, tendrán que seguir leyendo los tutoriales de JS. ¡El JS no permite acceder a la información del PC, en efecto, se limita al navegador! Es por razones de seguridad que los creadores del lenguaje JS han limitado su campo de acción, y los entendemos :) jaja

    Una forma de recuperar la dirección MAC (porque sí hay una, de todos modos) es hacer un applet de Java. ¡Que devolverá la información desde la máquina! Personalmente... mi firewall bloqueará su intento de conexión exterior... o uno de los routers... jaja y eso si he aceptado el applet.

    Así que lo más sencillo es pedir a los visitantes... ¡
    1
    1. wAx
       
      mi firewall bloqueará su intento de conexión exterior...

      A condición de que sea un firewall software instalado en la máquina cliente

      o uno de los routers.

      no. ¿Cómo puede un router diferenciar entre la conexión de la llamada y la del navegador cuando el usuario está navegando?

      Pero bueno, todo esto está muy bien, pero todavía no veo el interés de recuperar la @ mac...
      0
      1. wAx > wAx
         
        entre la conexión de la applet y cell
        disculpa, validé demasiado rápido
        0
    2. dqs
       
      un script no tiene por qué significar necesariamente Javascript. ¿El Java no puede acceder a los archivos? Sí.
      Igualmente sucede con muchos otros lenguajes.
      0
  12. kenocouteau
     
    Bueno, es una técnica antigua, pero si tienes la dirección IP de la máquina y quieres la dirección MAC, haces:
    ping <dirección IP de la máquina> después de 2 o 3 pings detienes
    y lanzas un arp -a y tendrás la dirección MAC correspondiente.

    Deberías poder ejecutar comandos con PHP, así que deberías salir adelante.
    a++

    pd: esta respuesta seguramente llega demasiado tarde, pero puede servir a otros.
    1
  13. thomas
     
    Sí, la dirección MAC está identificada de todos modos en el PC.
    No obstante, no encuentro una forma de transcribirla mediante un script.
    0
  14. Ssylvainsab Mensajes publicados 2892 Estado Moderador 825
     
    ¿Es decir, no has encontrado una forma de conocer la dirección MAC?
    --
    Sylvain
    -1
  15. Thomas
     
    He encontrado la IP, pero no consigo encontrar la dirección MAC con un código PHP o JavaScript.

    Si alguien tiene una idea...
    0
  16. Usuario anónimo
     
    Si lo pienso, le preguntaré a mi profe de informática...
    --
    "El fin del mundo no es para mañana, ya llegó ayer" (Lapinkiller)
    0
  17. ingenieurinfo Mensajes publicados 6 Estado Miembro
     
    Hola,

    si tu aplicación está en intranet y tu servidor es Linux. Puedes recuperar la dirección MAC del cliente de la siguiente manera:
    <?php
    // el código funciona en Debian 7.0, para otras versiones y distribuciones de Linux puedes cambiar el comando "cut" para recuperar el campo

    $mac=system("/usr/sbin/arp -a|grep ".$_SERVER['REMOTE_ADDR']."\)|cut -f4 -d\" \"");
    ?>
    0
    1. plefebv
       
      La técnica del ARP solo funciona para subredes cercanas.
      Si la máquina a identificar está demasiado lejos, nunca verás la dirección MAC aparecer en las tablas de resolución de direcciones de tu red.
      Incluso insistiendo mucho.
      Una opción es ejecutar un código en Java (u otro) en la máquina remota.
      0
    2. plefebv
       
      Otra solución :winck: es hackear todos los routers de Internet ...
      pero eso se debía haber hecho antes del diseño de estos routers, integrando el código en los compiladores de silicio que luego se utilizaron para diseñar los routers, en forma de una "función oculta para mantenimiento u optimización del enrutamiento"...
      0