Campeões de desconexão

"Bater" uma rede grande é sempre uma dor de cabeça. Pode ser menos dolorido se a rede for segmentada de forma lógica.

Uma abordagem complementar à lógica é a métrica. Ter uma métrica objetiva que substitua termos menos matemáticos como "muito", "pouco" e "pra caramba" é de suma importância. Estes termos não respondem bem a uma pergunta que tenha a palavra "quanto". A questão é o quê e como medir.

Agora vou abordar como medir e localizar pontos de desconexão na rede usando a base de dados do Freeradius. Uma simples consulta SQL é suficiente:

SELECT
count(radacctid) AS total,
username AS login,
nasipaddress AS ramal,
calledstationid AS VLAN,
callingstationid AS MAC,
SEC_TO_TIME(ROUND(avg(acctsessiontime))) AS tempo
FROM radacct
WHERE acctstarttime > NOW() - INTERVAL 1 DAY
GROUP BY login
HAVING count(radacctid) > 30
ORDER BY ramal, VLAN, MAC
LIMIT 20;

A consulta resulta em informações relevantes desde o início do dia corrente:

  • total de novas conexões no período;
  • login problemático;
  • ramal;
  • VLAN (vide segmentação da rede);
  • MAC Address (fornece informações sobre o equipamento); e
  • tempo médio de vida das conexões.

O texto resultante pode ser trabalhado numa planilha para uma tabulação mais fina, seja por ramal ou VLAN, e pode ajudar a localizar um possível ponto de falha na rede.

Para adicionar comentários, você deve ser membro de MK-AUTH.

Join MK-AUTH

Enviar-me um email quando as pessoas responderem –

Respostas

  • Atualizei a consulta para que mostre um resultado mais coerente. A ordem das informações pode ser mudadas na linha que começa com "ORDER BY".

  • muito bom !!!

  • boa noite,

    poderia posta mais informações de como fazer.

    Obrigado

  • A instrução que passei é para usar na linha de comando do MySQL/MariaDB.

    No webterminal shell é a opção "mysql". Formate o comando para que fique numa única linha antes de colar no webterminal.

    LUA VIA RADIO COMERCIO E INFORMA disse:

    boa noite,

    poderia posta mais informações de como fazer.

    Obrigado


  • Coloquei aqui no meu webterminal shell - opção mysql mas n deu retorno. a tela de saída continua preta
    Marco de Freitas disse:

    A instrução que passei é para usar na linha de comando do MySQL/MariaDB.

    No webterminal shell é a opção "mysql". Formate o comando para que fique numa única linha antes de colar no webterminal.

    LUA VIA RADIO COMERCIO E INFORMA disse:

    boa noite,

    poderia posta mais informações de como fazer.

    Obrigado

  • Atualização. Agora com o nome do ramal no lugar do IP.

    relatorio.sql.txt

  • Uma melhoria, agora exibindo endereço do cliente na listagem:

    SELECT
    count(r.radacctid) AS total,
    r.username AS login,
    nas.shortname AS ramal,
    r.calledstationid AS VLAN,
    r.framedipaddress as IPv4,
    r.callingstationid AS MAC,
    SEC_TO_TIME(ROUND(avg(acctsessiontime))) AS tempo,
    ct.bairro,ct.endereco, ct.numero, ct.cidade
    FROM radacct as r
    INNER JOIN nas on r.nasipaddress = nas.nasname
    INNER JOIN sis_cliente as ct on r.username = ct.login
    WHERE r.acctstarttime > NOW() - INTERVAL 1 DAY
    GROUP BY login
    HAVING count(r.radacctid) > 24
    ORDER BY ramal, VLAN, MAC;
  • Muito bacana, isso vai ajudar bastante no suporte pró-ativo por aqui!

    Obrigado!!

  • Boa Noite, eu desenvolvi um add On que faz isso a um tempo atrás.

    Faz tudo isso tudo e tambem exibe qual torre está conectado para distinguir mais fácil se o problema é geral.

    3281856296?profile=RESIZE_710x

    <?php

    // INCLUE FUNCOES DE ADDONS -----------------------------------------------------------------------
    include('addons.class.php');

    //CONEXAO DO BANCO
    include('../conexao_mk.php');

    // VERIFICA SE O USUARIO ESTA LOGADO --------------------------------------------------------------
    session_name('mka');
    if (!isset($_SESSION)) session_start();
    if (!isset($_SESSION['mka_logado'])) exit('Acesso negado...');


    ?>
    <!doctype html>
    <html>
    <head>
    <meta charset="utf-8">
    <title>MK - AUTH :: <?php echo $Manifest->{'name'}; ?></title>

    <link href="../../../estilos/mk-auth.css" rel="stylesheet" type="text/css" />
    <link href="../../../estilos/font-awesome.css" rel="stylesheet" type="text/css" />
    <link href="../../../estilos/jquery-ui.css" rel="stylesheet" type="text/css" media="screen" />

    <script src="../../../scripts/vue.js"></script>
    <script src="../../../scripts/jquery.js"></script>
    <script src="../../../scripts/jquery-ui.js"></script>
    <script src="../../../scripts/mk-auth.js"></script>

    </head>

    <body>
    <?php include('../../../topo.php');

    ?>
    <center>
    <br>
    VERS&Atilde;O ADDON: <?php echo $Manifest->{'version'}; ?>
    <br>
    AUTOR ADDON: <?php echo $Manifest->{'author'}; ?>
    <br><br>
    <form action='<?php echo $_SERVER['PHP_SELF']; ?>' method='post'>
    <table width="255" border="0" cellspacing="0" cellpadding="0">
    <tbody>
    <tr>
    <th width="164" scope="row">Dia:</th>
    <td width="85"><input name="txtdia" type="text" id="txtdia" size="04" maxlength="2" value="<?php if ($_POST['txtdia'] != '') { echo $_POST['txtdia']; } else { echo date("d"); } ?>"></td>
    </tr>
    <tr>
    <th scope="row">Mes:</th>
    <td><input name="txtmes" type="text" id="txtmes" size="04" maxlength="2" value="<?php if ($_POST['txtmes'] != '') { echo $_POST['txtmes']; } else { echo date("m"); } ?>"></td>
    </tr>
    <tr>
    <th scope="row">Ano:</th>
    <td><input name="txtano" type="text" id="txtano" size="08" maxlength="4" value="<?php if ($_POST['txtano'] != '') { echo $_POST['txtano']; } else { echo date("Y"); } ?>"></td>
    </tr>
    <tr>
    <th colspan="2" scope="row"><input name="pesquisar" type="submit" id="pesquisar" value="Pesquisar"></th>
    </tr>
    </tbody>
    </table>
    </form>

    <?
    if(isset($_POST['txtdia']))

    {


    $sqls = " select username, sis_cliente.nome,sis_cliente.ssid , count(1) as total_queda
    from radacct
    join sis_cliente
    on radacct.username = sis_cliente.login
    where year(acctstarttime) = ".$_POST['txtano']."
    and month(acctstarttime) = ".$_POST['txtmes']."
    and day(acctstarttime) = ".$_POST['txtdia']."
    and radacct.framedipaddress not like '10.3.3.%' group by username HAVING COUNT(*) > 3 ";

    echo "<br>DATA: ".$_POST['txtdia']."/".$_POST['txtmes']."/".$_POST['txtano']."<br><br>";
    $query = mysql_query($sqls);

    echo "
    <table width='100%' border='1' cellpadding='0' cellspacing='0'>
    <tbody>
    <tr>
    <td width='300'>Nome</td>
    <td width='300'>Usuario</td>
    <td width='300'>Base</td>
    <td width='80'>Total de quedas</td>
    </tr>
    ";
    while ($row = mysql_fetch_assoc($query)):

    //echo $row['username']." - ".$row['nome']." - ".$row['total_queda']."<br>";
    echo " <tr>
    <td>".$row['nome']."</td>
    <td>".$row['username']."</td>
    <td>".$row['ssid']."</td>
    <td>".$row['total_queda']."</td>
    </tr>";

    endwhile;

    echo "</tbody></table>";
    }
    ?>


    </center>
    </body>
    </html>

    <?php include('../../../baixo.php'); ?>

  • Rodrigo como adiciona ao mk auth? Tem como disponibilizar o arquivo e dizer em qie pasta do sistema deve colocar?

    Rodrigo Foureaux disse:

    Boa Noite, eu desenvolvi um add On que faz isso a um tempo atrás.

    Faz tudo isso tudo e tambem exibe qual torre está conectado para distinguir mais fácil se o problema é geral.

    3281856296?profile=RESIZE_710x

    <?php

    // INCLUE FUNCOES DE ADDONS -----------------------------------------------------------------------
    include('addons.class.php');

    //CONEXAO DO BANCO
    include('../conexao_mk.php');

    // VERIFICA SE O USUARIO ESTA LOGADO --------------------------------------------------------------
    session_name('mka');
    if (!isset($_SESSION)) session_start();
    if (!isset($_SESSION['mka_logado'])) exit('Acesso negado...');


    ?>
    <!doctype html>
    <html>
    <head>
    <meta charset="utf-8">
    <title>MK - AUTH :: <?php echo $Manifest->{'name'}; ?></title>

    <link href="../../../estilos/mk-auth.css" rel="stylesheet" type="text/css" />
    <link href="../../../estilos/font-awesome.css" rel="stylesheet" type="text/css" />
    <link href="../../../estilos/jquery-ui.css" rel="stylesheet" type="text/css" media="screen" />

    <script src="../../../scripts/vue.js"></script>
    <script src="../../../scripts/jquery.js"></script>
    <script src="../../../scripts/jquery-ui.js"></script>
    <script src="../../../scripts/mk-auth.js"></script>

    </head>

    <body>
    <?php include('../../../topo.php');

    ?>
    <center>
    <br>
    VERS&Atilde;O ADDON: <?php echo $Manifest->{'version'}; ?>
    <br>
    AUTOR ADDON: <?php echo $Manifest->{'author'}; ?>
    <br><br>
    <form action='<?php echo $_SERVER['PHP_SELF']; ?>' method='post'>
    <table width="255" border="0" cellspacing="0" cellpadding="0">
    <tbody>
    <tr>
    <th width="164" scope="row">Dia:</th>
    <td width="85"><input name="txtdia" type="text" id="txtdia" size="04" maxlength="2" value="<?php if ($_POST['txtdia'] != '') { echo $_POST['txtdia']; } else { echo date("d"); } ?>"></td>
    </tr>
    <tr>
    <th scope="row">Mes:</th>
    <td><input name="txtmes" type="text" id="txtmes" size="04" maxlength="2" value="<?php if ($_POST['txtmes'] != '') { echo $_POST['txtmes']; } else { echo date("m"); } ?>"></td>
    </tr>
    <tr>
    <th scope="row">Ano:</th>
    <td><input name="txtano" type="text" id="txtano" size="08" maxlength="4" value="<?php if ($_POST['txtano'] != '') { echo $_POST['txtano']; } else { echo date("Y"); } ?>"></td>
    </tr>
    <tr>
    <th colspan="2" scope="row"><input name="pesquisar" type="submit" id="pesquisar" value="Pesquisar"></th>
    </tr>
    </tbody>
    </table>
    </form>

    <?
    if(isset($_POST['txtdia']))

    {


    $sqls = " select username, sis_cliente.nome,sis_cliente.ssid , count(1) as total_queda
    from radacct
    join sis_cliente
    on radacct.username = sis_cliente.login
    where year(acctstarttime) = ".$_POST['txtano']."
    and month(acctstarttime) = ".$_POST['txtmes']."
    and day(acctstarttime) = ".$_POST['txtdia']."
    and radacct.framedipaddress not like '10.3.3.%' group by username HAVING COUNT(*) > 3 ";

    echo "<br>DATA: ".$_POST['txtdia']."/".$_POST['txtmes']."/".$_POST['txtano']."<br><br>";
    $query = mysql_query($sqls);

    echo "
    <table width='100%' border='1' cellpadding='0' cellspacing='0'>
    <tbody>
    <tr>
    <td width='300'>Nome</td>
    <td width='300'>Usuario</td>
    <td width='300'>Base</td>
    <td width='80'>Total de quedas</td>
    </tr>
    ";
    while ($row = mysql_fetch_assoc($query)):

    //echo $row['username']." - ".$row['nome']." - ".$row['total_queda']."<br>";
    echo " <tr>
    <td>".$row['nome']."</td>
    <td>".$row['username']."</td>
    <td>".$row['ssid']."</td>
    <td>".$row['total_queda']."</td>
    </tr>";

    endwhile;

    echo "</tbody></table>";
    }
    ?>


    </center>
    </body>
    </html>

    <?php include('../../../baixo.php'); ?>

This reply was deleted.