Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Matheus Bispo

COMO PEGAR O NÚMERO ÚNICO DO COMPUTADOR (IP OU NOME)

Recommended Posts

Boa Noite FÓRUM.

 

Estou com uma dúvida sobre um certo código.

 

Estou criando um sistema de avaliação, onde o aluno avalia o professor.  Neste sistema, eu tenho uma condição onde o mesmo aluno não pode responder o questionário 2x.

 

Estou fazendo isso pegando o ip da máquina ( ou aparentemente acho que estou fazendo isso ).

 

Utilizei esse código e não deu certo.

 

function getIp()
{
  $variables = array('REMOTE_ADDR',
                     'HTTP_X_FORWARDED_FOR',
                     'HTTP_X_FORWARDED',
                     'HTTP_FORWARDED_FOR',
                     'HTTP_FORWARDED',
                     'HTTP_X_COMING_FROM',
                     'HTTP_COMING_FROM',
                     'HTTP_CLIENT_IP');

  $return = 'Unknown';

  foreach ($variables as $variable)
  {
      if (isset($_SERVER[$variable]))
      {
          $return.= $_SERVER[$variable]." - ";
      }
  }

  return $return;
}

 

$_SERVER['LOCAL_ADDR];

$_SERVER['REMOTE_ADDR];

 

gethostbyaddr($_SERVER['REMOTE_ADDR']);

 

gethostbyaddr($_SERVER['LOCAL_ADDR']);

 

Já usei todos esses e não consigo o que preciso.

 

Eu preciso de um comando que pega algum numero fixo e único de uma máquina que nunca altere, até mesmo quando troca de rede. EXISTE ESTE TIPO DE COMANDO ?

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Essas funções são tudo números que podem ser alterados, por mais que você capture o ip de alguém ainda vai ser possível burlar o questionário e responder mais de 2x, o seu professor pra pregar uma peça em vocês pode usar proxy's e responder o questionário 100x, alterar o ip manualmente e responder mais 5x/6x ou até mesmo usar os ip's do opera com vpn embutida e responder mais umas 5x.

É muito mais fácil você usar o seu banco de dados à seu favor e limitar o número de vezes que o aluno pode responder o questionário, que no caso é 2x. Você poem uma coluna "limite_questionario", adiciona 2 nela por padrão, faz a verificação e já era.

 

A única coisa que os ips podem fazer nesse caso específico é complementar a segurança, como armazenar em um log o número do ip dos alunos que tentaram responder mais de 2x ou até mesmo armazenar os ips de alunos que tentaram burlar o sistema utilizando proxy's e por aí vai.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O mesmo aluno não pode responder duas vezes o questionário, porem a mesma máquina pode ser usada por outro aluno para responder (eu acho), logo tentar fazer bloqueio por IP ou MAC ou número de série do HD não é recomendável. O correto seria exigir login do aluno e guardar o login em um tabela toda vez que o questionário fosse respondido com sucesso. Assim ao usuário tentar efetuar o login você verifica se o mesmo já respondeu.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então, eu não posso exigir uma identificação do Usuário, porque senão comprometia a segurança do meu sistema. ( O aluno ficaria com receio de avaliar o professor corretamente, caso este pense que será identificado)

 

O que eu preciso é realmente um bloqueio. Esse do mac ou pelo serial do HD seria perfeito. Alguém sabe fazer ?

 

Aproveitando o mesmo tópico, que é uma pergunta relevante sobre o assunto, achei este código aqui, e funciona sobre o IP. 

 

<script type="text/javascript">
/**
 * Get the user IP throught the webkitRTCPeerConnection
 * @param onNewIP {Function} listener function to expose the IP locally
 * @return undefined
 */
function getUserIP(onNewIP) { //  onNewIp - your listener function for new IPs
    //compatibility for firefox and chrome
    var myPeerConnection = window.RTCPeerConnection || window.mozRTCPeerConnection || window.webkitRTCPeerConnection;
    var pc = new myPeerConnection({
        iceServers: []
    }),
    noop = function() {},
    localIPs = {},
    ipRegex = /([0-9]{1,3}(\.[0-9]{1,3}){3}|[a-f0-9]{1,4}(:[a-f0-9]{1,4}){7})/g,
    key;

    function iterateIP(ip) {
        if (!localIPs[ip]) onNewIP(ip);
        localIPs[ip] = true;
    }

     //create a bogus data channel
    pc.createDataChannel("");

    // create offer and set local description
    pc.createOffer(function(sdp) {
        sdp.sdp.split('\n').forEach(function(line) {
            if (line.indexOf('candidate') < 0) return;
            line.match(ipRegex).forEach(iterateIP);
        });
        
        pc.setLocalDescription(sdp, noop, noop);
    }, noop); 

    //listen for candidate events
    pc.onicecandidate = function(ice) {
        if (!ice || !ice.candidate || !ice.candidate.candidate || !ice.candidate.candidate.match(ipRegex)) return;
        ice.candidate.candidate.match(ipRegex).forEach(iterateIP);
    };
}

// Usage

getUserIP(function(ip)
{
  document.getElementById("ip").innerHTML = ip;
}
);
</script>

 

//PRA EXIBIR O IP DA REDE

 

<?php
echo "<span id='ip'></span><br>";
?>

 

Como eu faço para pegar este IP da função JS e jogar em uma variável PHP ?

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo, já tentei esses códigos simples, e nenhum deles funcionou(Porque eu não sei). Tive que partir para os mirabolantes. Este que citei no outro post, deu certo, mas não consigo passar para uma variável php. Essa é a dúvida agora.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Realmente, o remote_addr não funcionou pra você pq talvez você esteja no localhost, mas em um servidor web funciona normal.

E pra você conseguir o endereço MAC de alguém é necessário você fazer um software, fazer o usuário baixar ele pra que possa ser possível capturar o endereço MAC, igual os bancos fazem pra garantir que somente aquela máquina do usuário tenha acesso permitido via desktop.

 

Faz o usuário cadastrar somente o número de celular dele e mete um autenticador do google, aquele de 2 fatores, pro usuário só responder o questionário quando fizer a autenticação usando o número de celular dele com leitor de qr code, quando ele inserir o código correto que é informado no celular dele pelo autenticador do google você contabiliza, pra quando chegar no 2 você barrar ele, dessa forma você evita o usuário burlar o sistema na sacanagem, pra burlar ele precisaria de outro celular com leitor de qrcode + autenticador do google + um número diferente, aí é onde entraria o IP de forma secundária, pra colocar mais um elemento pra dificultar. Essa é uma forma melhor do que session, ip, cookie, pq tudo isso sozinho, pra esse seu caso, não vai garantir o funcionamento da forma como você quer.

 

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bruno Mars, seria interessante isso, mas eu não faço a mínima ideia de como fazer. E meu site está online, hospedado na hostinger, não é local. Pior que no local, dava certo. Só que me trazia o (::1) o ipv6, e quando teste web, vem nada.

 

O código acima, consegui resolver o problema de achar o ip, mas não consigo pegar esse número para manipulá-lo. Eu tenho outras condições que ajudam a formar uma chave composta de segurança, mas essa é essencial para o funcionamento.

 

Se souber do serial hd, pode me dizer ? Ou se saber também sobre o código acima, já ficaria muito grato.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pra pegar o IP daquele script que você passou e que funcionou aí pra você, tenta fazer algo assim:

<script type="text/javascript">
/**
 * Get the user IP throught the webkitRTCPeerConnection
 * @param onNewIP {Function} listener function to expose the IP locally
 * @return undefined
 */
function getUserIP(onNewIP) { //  onNewIp - your listener function for new IPs
    //compatibility for firefox and chrome
    var myPeerConnection = window.RTCPeerConnection || window.mozRTCPeerConnection || window.webkitRTCPeerConnection;
    var pc = new myPeerConnection({
        iceServers: []
    }),
    noop = function() {},
    localIPs = {},
    ipRegex = /([0-9]{1,3}(\.[0-9]{1,3}){3}|[a-f0-9]{1,4}(:[a-f0-9]{1,4}){7})/g,
    key;
    function iterateIP(ip) {
        if (!localIPs[ip]) onNewIP(ip);
        localIPs[ip] = true;
    }
     //create a bogus data channel
    pc.createDataChannel("");
    // create offer and set local description
    pc.createOffer(function(sdp) {
        sdp.sdp.split('\n').forEach(function(line) {
            if (line.indexOf('candidate') < 0) return;
            line.match(ipRegex).forEach(iterateIP);
        });
        
        pc.setLocalDescription(sdp, noop, noop);
    }, noop); 
    //listen for candidate events
    pc.onicecandidate = function(ice) {
        if (!ice || !ice.candidate || !ice.candidate.candidate || !ice.candidate.candidate.match(ipRegex)) return;
        ice.candidate.candidate.match(ipRegex).forEach(iterateIP);
    };
}
// Usage
getUserIP(function(ip)
{
  document.getElementById("ip").value = ip;
}
);
</script>

<input type="hidden" name="pegar_ip" id="ip">

Veja que adicionei a input hidden no final pra que você possa pegar o ip através de um formulário e fiz uma pequena alteração em document.getElementById("ip").innerHTML mudei para document.getElementById("ip").value , isso faz com que o endereço de ip apareça no campo da input pra que você possa pegar ele via post ou get e manipular ele da forma como você quiser.

 

Sobre o autenticador, se quiser usar e mexer você vai precisar usar a API do google autenticador, é uma api que o google fornece pra que a comunidade possa usar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu tinha visto algo parecido, mas não tinha dado certo. Foi só mudar do innerHTML para value, que deu certo.

 

VLW

 

Se alguém souber como pegar o n° serial do hd com php ou javascript, fico eternamente grato. 

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por landerbadi
      Boa tarde pessoal. Estou tentado fazer uma consulta no banco de dados porém estou tendo dificuldades. Tenho uma tabela chamada "itens" com os seguintes campos: id, item, ativo. Nela tem cadastrado vários itens. No campo ativo eu coloco a letra "S" para informar que este item está ativo no sistema. Por exemplo: 1, casa, S 2, mesa, S 3, cama, S 4, moto S 5, rádio O quinto registro "radio" não está ativo no sistema pois não tem um "S" no campo ativo. E outra tabela chamada "produtos" com os seguintes campos (id, item1, item2, item3) com os seguintes registros: 1, casa, mesa, moto 2, mesa, casa, cama 3, rádio, cama, mesa Eu preciso fazer uma busca na tabela produtos da seguinte maneira: Eu escolho um registro na tabela "itens", por exemplo "mesa". Preciso fazer com que o php me liste todos os registros da tabela "produtos" que contenham a palavra "mesa". Até aqui tudo bem eu consigo listar. Estou fazendo assim: <?php $item = "mesa" $sql = mysqli_query($conn, "SELECT * FROM produtos WHERE item1 LIKE '$item' OR item2 LIKE '$item' OR item3 LIKE '$item' LIMIT 10"); while($aux = mysqli_fetch_assoc($sql)) { $id = $aux["id"]; $item1 = $aux["item1"]; $item2 = $aux["item2"]; $item3 = $aux["item3"]; echo $id . " - " . $item1 . ", " . $item2 . ", " $item3 . "<br>"; } ?> O problema é que está listando todos os registros que contém o item mesa. Eu preciso que o php verifique os demais item e me liste somente os registro em que todos os registros estejam ativos no sistema. No exemplo acima ele não deveria listar o registro 3. pois nesse registro contém o item "radio" e este item não está ativo no sistema. Ou seja, o registro "radio" na tabela itens não possui um "S" na coluna "ativo". Alguém sabe como resolver isso?
    • Por ILR master
      Fala galera.
      Espero que todos estejam bem.
      Seguinte: Tenho um arquivo xml onde alguns campos estão com : (dois pontos), como o exemplo abaixo:
       
      <item>
      <title>
      d sa dsad sad sadasdas
      </title>
      <link>
      dsadas dsa sad asd as dsada
      </link>
      <pubDate>sadasdasdsa as</pubDate>
      <dc:creator>
      d sad sad sa ad as das
      </dc:creator>
      </item>
       
      Meu código:
       
      $link = "noticias.xml"; 
      $xml = simplexml_load_file($link); 
      foreach($xml -> channel as $ite) {     
           $titulo = $ite -> item->title;
           $urltitulo = $ite -> item->link;
           print $urltitulo = $ite -> item->dc:creator;
      } //fim do foreach
      ?>
       
      Esse campo dc:creator eu não consigo ler. Como faço?
       
      Agradeço quem puder me ajudar.
       
      Abs
       
       
    • Por First
      Olá a todos!
       
      Eu estou criando um sistema do zero mas estou encontnrando algumas dificuldades e não estou sabendo resolver, então vim recorrer ajuda de vocês.
      Aqui está todo o meu código: https://github.com/PauloJagata/aprendizado/
       
      Eu fiz um sistema de rotas mas só mostra o conteúdo da '/' não sei porque, quando eu tento acessar o register nada muda.
      E eu também quero que se não estiver liberado na rota mostra o erro de 404, mas quando eu tento acessar um link inválido, nada acontece.
      Alguém pode me ajudar com isso? E se tiver algumas sugestão para melhoria do código também estou aceitando.
       
       
      Desde já, obrigado.
    • Por landerbadi
      Olá pessoal, boa tarde
       
      Tenho uma tabela chamada "produtos" com os seguintes campos (id, produto) e outra tabela chamada "itens" com os seguintes campos (id, prod_01, prod_02, prod_03, prod_04).
       
      Na tabela produtos eu tenho cadastrado os seguintes produtos: laranja, maçã, uva, goiaba, arroz, feijão, macarrão, etc.
       
      Na tabela itens eu tenho cadastrado os itens da seguinte maneira:
       
      1, laranja, uva, arroz, feijão;
      2, maçã, macarrão, goiaba, uva;
      3, arroz, feijão, maçã, azeite
       
      Meu problema é o seguinte: 
      Eu escolho um produto da tabela "produtos", por exemplo "uva".  Preciso fazer uma consulta na tabela "itens" para ser listado todos os registros que contenham o produto "uva" e que todos os demais produtos estejam cadastrados na tabela "produtos".
       
      No exemplo acima seria listado apenas dois registros, pois o terceiro registro não contém o produto "uva". 
       
      Alguém pode me ajudar? Pois estou quebrando a cabeça a vários dias e não consigo achar uma solução.
    • Por landerbadi
      Boa tarde pessoal. Estou tentado fazer uma consulta no banco de dados porém estou tendo dificuldades. Tenho uma tabela chamada "itens" com os seguintes campos: id, item, plural, ativo. Nela tem cadastrado vários itens e seu respectivo plural. No campo ativo eu coloco a letra "S" para informar que esta palavra está ativa no sistema. Por exemplo: 1, casa, casas, S 2, mesa, mesas, S 3, cama, camas, S 4, moto, motos, S 5, rádio, rádios O quinto registro "radio" não está ativo no sistema pois não tem um "S" no campo ativo. E outra tabela chamada "variações" com os seguintes campos (id, item1, item2, item3) com os seguintes registros: 1, casa, camas, moto 2, mesas, casas, radio 3, rádio, cama, mesa Eu preciso fazer uma busca na tabela variações da seguinte maneira: Eu escolho um registro na tabela "itens", por exemplo "casa". Preciso fazer com que o php me liste todos os registros da tabela "variações" que contenham a palavra "casa". Porém se tiver algum registro com a palavra "casas" também tem que ser listado. Neste caso ele irá encontrar dois registros. Agora eu preciso que o php verifique os demais itens e faça a listagem apenas dos item que estão ativos (que contenham um "S" no campo ativo. Neste caso ele irá encontrar apenas um registro, pois o segundo registro contém a palavra "rádio". E "rádio" não está ativo na tabela itens. Como faço isso?
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.