Pergunta

Gostaria de obter uma lista de redes sem fio disponíveis. Idealmente, isso seria através de alguma chamada C, mas eu não me importo se eu tiver que kludge-lo com uma chamada de sistema. Ainda melhor se a chamada C exigido ou programa não requer algum pacote partido 3ª exótico.

A internet parece sugerir que eu uso sudo iwlist <interface> scan que parece fazer o truque na linha de comando, mas eu prefiro não requerem permissões de root. Eu só quero ver o básico, não muda nada.

Foi útil?

Solução

Wireless ferramentas pacote - dos quais iwlist é uma parte - também contém uma rede sem fio ferramentas auxiliares de biblioteca. Você precisa incluir iwlib.h e ligação com libiw.a (ou seja, adicionar -liw). Em seguida, procure a documentação para o função iw_set_ext. O SIOCSIWSCAN parâmetro será de maior uso. Para um exemplo de como usar esta interface, dê uma olhada na fonte KWiFiManager na biblioteca KDE (ver: Interface_wireless_wirelessextensions :: get_available_networks método). Alternativamente, você também pode baixar o sem fio código-fonte Ferramentas e dar uma olhada em como a função iwlib iw_set_ext também é usado para a digitalização no iwlist.c.

Como para privilégios, imagino que o processo terá de ser executado como root para executar a digitalização. Eu adoraria saber se isso poderia ser feito de outra forma também.

Uma vez que você estiver usando o Ubuntu 8.04 pacote libiw-dev deve ser de uso.

Outras dicas

É muito fácil fazer uma varredura na linha de comando. As páginas de manual são o seu amigo aqui (confira iwconfig e iwlist ). Mas usando a interface C é um pouco mais difícil por isso vou focar nisso.

Em primeiro lugar, como outras pessoas mencionados, definitivamente download a ferramentas sem fio código fonte . Toda a documentação para a interface de programação está nos .c arquivos. Tanto quanto eu posso dizer, não há documentação web para a api. No entanto, o código fonte é muito fácil de ler. Você praticamente só precisa de iwlib.h e iwlib.c para esta questão.

Enquanto você pode usar iw_set_ext e iw_get_ext, o libiw implementa uma iw_scan função de digitalização básica, a partir do qual você pode extrair a maioria das informações que você precisa.

Aqui é um programa simples para obter o ESSID para todas as redes sem fio disponíveis. Compilar com -liw e correr com sudo.

#include <stdio.h>
#include <time.h>
#include <iwlib.h>

int main(void) {
  wireless_scan_head head;
  wireless_scan *result;
  iwrange range;
  int sock;

  /* Open socket to kernel */
  sock = iw_sockets_open();

  /* Get some metadata to use for scanning */
  if (iw_get_range_info(sock, "wlan0", &range) < 0) {
    printf("Error during iw_get_range_info. Aborting.\n");
    exit(2);
  }

  /* Perform the scan */
  if (iw_scan(sock, "wlan0", range.we_version_compiled, &head) < 0) {
    printf("Error during iw_scan. Aborting.\n");
    exit(2);
  }

  /* Traverse the results */
  result = head.result;
  while (NULL != result) {
    printf("%s\n", result->b.essid);
    result = result->next;
  }

  exit(0);
}

IMPORTANTE: Este é apenas um programa de demonstração. É possível que alguns resultados não ter um essid. Além disso, este assume a sua interface wireless é "wlan0". Você começa a idéia.

Leia o iwlib código fonte!

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top