+ Responder ao Tópico



  1. #1

    Padrão Capiturando Mac, hora e data

    Boa tarde pessoal, estou tentando desenvolver um sistemas para e estou com dificuldades ao adquirir uma determindada função:
    Gostaria muito de saber o mac, a data e a hora que um determinado usuario acessou o meu servido, mas não estou conseguindo fazer a função, espero que eu tenha sido claro e desde já aguardo e agradeço as respostas.

  2. #2

    Padrão

    Amigo, o MAC address não faz parte do cabeçalho HTTP, portanto fica meio complicado consegui-lo. Uma forma é pedir a tabela ARP... Os comandos ficariam mais ou menos assim:

    $ip = $_SERVER['REMOTE_ADDR'];
    $mac = `arp -na | grep $ip | cut -d" " -f 2`;

    Porém, antes de utilizar dê uma testada por ae... Não testei esse código, apenas o escrevi...

    BTW, você sabe que o MAC só é válido em um rede local? Todos os acessos com IPs fora da rede serão o do gateway...

    para a data: Let me google that for you

    Dê uma olhada na FAQ do Under-Linux.org

  3. #3

    Padrão

    Eae Pedro, to com o mesmo problema do amigo F3n1x, já fiz vários testes e nada. Tentei usar a função shell_exec, mas ela nao funciona com arp(nao sei porque), daí habilitei o sudo e também nao funcionou. Acho que é problema com permissão aqui no Fedora 8. Vc tem alguma idéia do que possa ser?

    vlw

  4. #4

    Padrão

    Não seria um problema com o contexto do SELinux? Se não me engano o Fedora vem com SELinux ativado por padrão. Tente desativá-lo e faça os testes... Depois reative-o, o SELinux é uma camada de segurança muito importante. Tente ver com alguém mais experiente como criar ACLs para ele.

  5. #5
    Moderador Avatar de Magal
    Ingresso
    Mar 2007
    Localização
    Rio de Janeiro
    Posts
    2.041
    Posts de Blog
    118

    Padrão

    Vem ativado por padrão.

    Citação Postado originalmente por PEdroArthurJEdi Ver Post
    Não seria um problema com o contexto do SELinux? Se não me engano o Fedora vem com SELinux ativado por padrão. Tente desativá-lo e faça os testes... Depois reative-o, o SELinux é uma camada de segurança muito importante. Tente ver com alguém mais experiente como criar ACLs para ele.

  6. #6

    Padrão

    Blz cara, vou testar
    Ainda hj posto o resultado
    vlw

  7. #7

    Padrão

    Galera, deu certo depois de desativar o SELinux, consigo pegar o mac com $mac = shell_exec('arp -a $ip'), só que a função $_SERVER['REMOTE_ADDR'], que joga o retorno na variável ip(Ex: $ip = $_SERVER['REMOTE_ADDR']; ), retorna o ip do servidor que roda o apache. Já tentei usar $_SERVER['HTTP_CLIENT_IP'], mas nao funfou. Será o q pode ser? Vc's tem alguma ideia? Por favor, da uma força ai.

    vlw

  8. #8
    Moderador Avatar de minelli
    Ingresso
    Aug 2006
    Localização
    Pres. Venceslau - SP | Pres. Prudente - SP
    Posts
    1.412
    Posts de Blog
    10

    Padrão Comando ñ Funciona

    Rapaiz tive esse problema tb, aqui resolvi assim:

    Use o Comando "EXEC"

    e adicione na ultima linha do arquivo /etc/sudoers

    www-data ALL=(ALL) NOPASSWD: ALL

    e de o "exec" no php como sudo e vai funcionar.

    ***OBS.: Caso este post tenha sido util agradeça.

  9. #9

    Padrão

    eu estou usando o php no windows, estes comandos que vc passaram é para o linux, eu já consegui uns avanços, eu consigo ver todos os macs e ips que estão acessando a minha rede, mas não consigo associa-los a um nome valido, ate cheguei perto mas tanto faz eu por um ip da rede ou não ele sempre mosta como on,

    Radio Mac IP Status
    Paloma 00:ff:62.1d:c1:50 10.10.99.109 On Line
    Paulo 00:fc:88:44:44:ca 70.99.99.257 On Line (este endereço não existe mas ele mostra com on)

    usando o comando ping ele me dá a seguinte resposta

    Disparando contra 10.0.0.253 com 32 bytes de dados:

    Resposta de 10.0.0.253: bytes=32 tempo=10ms TTL=255
    Resposta de 10.0.0.253: bytes=32 tempo=17ms TTL=255
    Resposta de 10.0.0.253: bytes=32 tempo=2ms TTL=255
    Resposta de 10.0.0.253: bytes=32 tempo=17ms TTL=255

    Estat¡sticas do Ping para 10.0.0.253:
    Pacotes: Enviados = 4, Recebidos = 4, Perdidos = 0 (0% de perda),
    Aproximar um n£mero redondo de vezes em milissegundos:
    M¡nimo = 2ms, M ximo = 17ms, M‚dia = 11ms

    usando o comando arp
    ele me mostra todos os pc conectados a rede conforme diz abaixo:


    Interface: 10.0.100.1 --- 0x10004
    Endere‡o IP Endere‡o f¡sico Tipo
    10.0.0.253 00-4f-62-1c-a9-e0 dinƒmico
    10.0.10.254 00-21-91-c9-14-39 dinƒmico

    eu queria poder mesmo que manualmente, associar o nome do host e ao inves do dinamico aparece on ou off

    tentei tbm a seguinte sintax:

    $status = shell_exec("ping -n 2 10.0.10.1");

    if(!ereg("bytes from",status)){
    echo "On Line"."<br>";
    }else{
    echo "Off Line";
    echo "<pre>$status</pre><br>";
    }

    echo "<br>";
    echo "<br>";
    }

    o que eu queria é que no campo status a cada tempo que eu determinasse atreves de um wilhe ou de um refresh ele mostrasse se esta ou não on line.

    o que eu estou fazendo de errado?

    existe um exemplo bem proximo do que eu quero no seguinte site:
    http://www.hostingcia.info/Ping/

    Lembrando estou usando o windows e php
    Última edição por F3n1x; 25-01-2009 às 11:31.

  10. #10

    Padrão

    Bom dia galera.......
    Depois de muita pesquisa, conseguir o objetivo, ai vai:

    ....
    ....
    ....
    //Pega o ip do cliente
    $ip = $_SERVER["HTTP_X_FORWARDED_FOR"];

    //Joga a saída do comando na matriz out
    exec("arp -a ".$ip." ", $out);

    //tamanho da string dentro do vetor na posição zero
    $tamanho = strlem($out[0]);

    //retorna o mac, definindo a posição inicial($tam - 33) mais a quantidade de caracteres a partir da posição inicial(17)
    $mac = substr($out[0], $tam - 33, "17");

    echo "O mac e: $mac";
    ....
    ....
    ....

    Vlw, agradeço a colaboração de todos......