Ir para conteúdo

POWERED BY:

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 violin101
      Caros amigos do grupo, saudações e um feliz 2025.
       
      Estou com uma pequena dúvida referente a Teclas de Atalho.

      Quando o Caps Lock está ativado o Comando da Tecla de Atalho não funciona.
      ou seja:
      se estiver para letra minúscula ====> funciona
      se estiver para letra maiúscula ====> não funciona
       
      Como consigo evitar essa falha, tanto para Letra Maiúscula quanto Minúscula ?

      o Código está assim:
      document.addEventListener( 'keydown', evt => { if (!evt.ctrlKey || evt.key !== 'r' ) return;// Não é Ctrl+r, portanto interrompemos o script evt.preventDefault(); });  
      Grato,
       
      Cesar
    • Por violin101
      Caros amigos, saudações.
       
      Por favor, poderiam me ajudar.

      Estou com a seguinte dúvida:
      --> como faço para para implementar o input código do produto, para quando o usuário digitar o ID o sistema espera de 1s a 2s, sem ter que pressionar a tecla ENTER.

      exemplo:
      código   ----   descrição
           1       -----   produto_A
       
      Grato,
       
      Cesar
    • Por violin101
      Caros amigos, saudações.
       
      Humildemente peço desculpa por postar uma dúvida que tenho.

      Preciso salvar no MySql, os seguinte Registro:

      1 - Principal
      ====> minha dúvida começa aqui
      ==========> como faço para o Sistema Contar Automaticamente o que estiver despois do 1.____?
      1.01 - Matriz
      1.01.0001 - Estoque
      1.01.0002 - Oficina
      etc

      2 - Secundário
      2.01 - Loja_1
      2.01.0001 - Caixa
      2.01.0002 - Recepção
      etc
       
      Resumindo seria como se fosse um Cadastro de PLANO de CONTAS CONTÁBEIL.

      Grato,


      Cesar









       
    • Por violin101
      Caros amigos, saudações.

      Por favor, me perdoa em recorrer a orientação dos amigos.

      Preciso fazer um Relatório onde o usuário pode Gerar uma Lista com prazo para vencimento de: 15 / 20/ 30 dias da data atual.

      Tem como montar uma SQL para o sistema fazer uma busca no MySql por período ou dias próximo ao vencimento ?

      Tentei fazer assim, mas o SQL me traz tudo:
      $query = "SELECT faturamento.*, DATE_ADD(faturamento.dataVencimento, INTERVAL 30 DAY), fornecedor.* FROM faturamento INNER JOIN fornecedor ON fornecedor.idfornecedor = faturamento.id_fornecedor WHERE faturamento.statusFatur = 1 ORDER BY faturamento.idFaturamento $ordenar ";  
      Grato,
       
      Cesar
       
       
       
       
    • Por violin101
      Caros amigos, saudações
       
      Por favor, me perdoa em recorrer a orientação dos amigos, tenho uma dúvida.
       
      Gostaria de uma rotina onde o Sistema possa acusar para o usuário antes dos 30 dias, grifar na Tabela o aviso de vencimento próximo, por exemplo:
       
      Data Atual: 15/11/2024
                                           Vencimento
      Fornecedor.....................Data.....................Valor
      Fornecedor_1...........01/12/2024..........R$ 120,00 <== grifar a linha de Laranja
      Fornecedor_1...........01/01/2025..........R$ 130,00
      Fornecedor_2...........15/12/2024..........R$ 200,00 <== grifar a linha de Amarelo
      Fornecedor_2...........15/01/2025..........R$ 230,00
      Fornecedor_3...........20/12/2024..........R$ 150,00
       
      Alguém tem alguma dica ou leitura sobre este assunto ?

      Grato,
       
      Cesar
×

Informação importante

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