Como os pontos de acesso determinam o poder de um cliente associado ou não associado?

4

Não consigo descobrir como os pontos de acesso determinam o poder do sinal de clientes próximos.

Eu não encontrei esta informação em nenhum dos tutoriais de pacotes WiFi, então posso apenas supor que a informação de energia não vem do cliente, mas é determinada pelo ponto de acesso.

Eu conheço um aplicativo chamado aircrack que pode determinar essa informação, mas antes de entrar nessa e procurar, gostaria de ter uma visão geral de como a energia é calculada. Minhas habilidades com o Google não são tão ruins, por isso estou surpreso que até agora não consegui encontrar nenhuma informação sobre isso. Certamente, se o aircrack conseguir, essa informação está disponível!

Eu estava esperando que os usuários aqui possam me apontar na direção certa?

Em relação à recompensa

Eu acho que é hora de tentar usar uma recompensa. Em suas respostas, poste todos os links que você puder encontrar que possam ajudar qualquer pessoa a entender como funciona essa detecção de energia. Informações específicas sobre como ele é implementado no aircrack seriam perfeitas!

ATUALIZAÇÃO:

A partir de agora, usando o pacote aircrack-ng como exemplo, parece que o valor de energia é puxado de buf [2] em net_read (). Acredito que esse valor venha, em última análise, do net_cmd, o que resulta em chamadas pareadas para net_send e net_get (). Eu acho que net_get () lê em qualquer informação de cabeçalho que é enviada devido à chamada para net_send (), e este cabeçalho indica quantos dados devem ser copiados para o buffer buf [].

Mas agora o que eu não entendo é isso - com certeza parece que o buf [] é preenchido pela chamada para net_read_exact (), que é apenas leitura de dados do socket. Se esse for o caso, e se a energia for um detalhe do driver, por que o valor de energia no buffer? Se esse buffer é de fato preenchido pelos dados do soquete, isso não implica que a energia é enviada pelo cliente / estação? Eu acredito que o AP / driver é responsável por fornecer as informações de energia, assim como todo mundo já disse, mas não faça isso.

    
por Dave 22.05.2013 / 02:30

2 respostas

4

Na verdade, o aplicativo que determina essas informações é airodump-ng , não aircrack-ng . A partir da airodump-ng documentação , os níveis de energia são determinados como:

PWR - Signal level reported by the card. Its signification depends on the driver [...]

Bem, vamos ver se podemos fazer melhor. Analisando o código-fonte mais recente do arquivo airodump-ng.c , vemos o energia é definida na função dump_add_packet(...) :

/* only update power if packets comes from
 * the AP: either type == mgmt and SA != BSSID,
 * or FromDS == 1 and ToDS == 0 */
if (...)
    ap_cur->power_lvl[ap_cur->power_index] = ri->ri_power;

Depois de vasculhar várias camadas de abstração, estruturas e ponteiros de função, descobri que esses dados são preenchidos a partir da função linux_read(...) definida no osdep/linux.c . É aqui que a variável ri_power no ri struct é preenchida com dados e, de fato, parece ser específica do driver.

A maioria dos motoristas segue o padrão Radiotap (em oposição ao padrão mais antigo prism54 detalhado abaixo), que ter vários campos predefinidos para determinar a potência da antena, o ruído e a atenuação. Esses campos são usados diretamente por airodump-ng para preencher a variável ri_power . Alguns deles já estão disponíveis em valores de decibéis ou de potência.

airodump-ng usará o campo sinal da antena (em dBm) ou o campo de sinal da antena dB (em dB) para calcular a potência do sinal exibido. Etapas similares são usadas para os outros campos, já que são todos predeterminados na especificação do Radiotap vinculada acima. Por exemplo, o ri_power usando o campo dB Antenna Signal pode ser calculado como:

case IEEE80211_RADIOTAP_DB_ANTSIGNAL:
    if(!got_signal) {
        if( *iterator.this_arg < 127 )
            ri->ri_power = *iterator.this_arg;
        else
            ri->ri_power = *iterator.this_arg - 255;

        got_signal = 1;
    }
    break;

Como mencionado anteriormente, alguns dispositivos seguem a especificação (mais antiga) prism54 (em vez do Radiotap), que usa um cabeçalho de comprimento fixo. Neste caso, o poder RX diretamente do buffer (note que este não é o código-fonte completo, apenas mostra os caminhos tomados para preencher ri_power ):

if (tmpbuf[7] == 0x40)
    ri->ri_power = tmpbuf[0x33];
else
    ri->ri_power = *(unsigned int *)( tmpbuf + 0x5C );
    
por 25.05.2013 / 15:52
1

Não sei bem o que você está perguntando.

Os pontos de acesso possuem receptores de rádio, naturalmente, e esses receptores possuem seções analógicas com ganho automático, das quais o hardware pode derivar uma intensidade de sinal recebido. O driver de hardware torna essas informações disponíveis para outros softwares de maneira dependente do sistema operacional.

É por isso que o aircrack faz um grande negócio sobre drivers e hardware .

    
por 25.05.2013 / 07:30