GNU/Linux >> Tutoriels Linux >  >> Linux

Comment puis-je obtenir une liste des réseaux sans fil disponibles sous Linux ?

Il est assez facile de faire un scan en ligne de commande. Les pages de manuel sont vos amies ici (consultez iwconfig et iwlist ). Mais l'utilisation de l'interface C est un peu plus difficile, je vais donc me concentrer là-dessus.

Tout d'abord, comme d'autres personnes l'ont mentionné, téléchargez définitivement le code source des outils sans fil. Toute la documentation de l'interface de programmation se trouve dans le .c des dossiers. Autant que je sache, il n'y a pas de documentation Web pour l'API. Cependant, le code source est assez facile à lire. Vous n'avez pratiquement besoin que de iwlib.h et iwlib.c pour cette question.

Bien que vous puissiez utiliser iw_set_ext et iw_get_ext , la libido implémente une fonction de numérisation de base iw_scan , à partir duquel vous pouvez extraire la plupart des informations dont vous avez besoin.

Voici un programme simple pour obtenir l'ESSID pour tous les réseaux sans fil disponibles. Compiler avec -liw et exécuter avec 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);
}

AVIS DE NON-RESPONSABILITÉ :Ceci n'est qu'un programme de démonstration. Il est possible que certains résultats n'aient pas d'essid. De plus, cela suppose que votre interface sans fil est "wlan0". Vous voyez l'idée.

Lisez le iwlib code source !


Le package Wireless Tools -- dont iwlist fait partie -- contient également une bibliothèque d'aide Wireless Tools. Vous devez inclure iwlib.h et lien avec libiw.a (c'est-à-dire ajouter -liw). Consultez ensuite la documentation de iw_set_ext fonction. Le SIOCSIWSCAN paramètre sera le plus utile. Pour un exemple d'utilisation de cette interface, jetez un œil à la source KWifiManager dans la bibliothèque KDE (voir :méthode Interface_wireless_wirelessextensions::get_available_networks). Vous pouvez également télécharger le code source des outils sans fil et découvrir comment la fonction iwlib iw_set_ext est également utilisée pour la numérisation dans iwlist.c.

En ce qui concerne les privilèges, j'imagine que le processus devra s'exécuter en tant que root pour effectuer l'analyse. J'aimerais savoir si cela pourrait également être fait autrement.

Puisque vous utilisez Ubuntu 8.04, le paquet libiw-dev devrait être utile.


Vous pouvez utiliser nmcli qui ne nécessite pas d'autorisations root ni de nom d'interface WIFI.

nmcli -t -f ssid dev wifi

Linux
  1. Comment puis-je obtenir l'état du clavier sous Linux?

  2. Comment répertorier les processus attachés à un segment de mémoire partagée sous Linux ?

  3. Comment pouvons-nous obtenir la liste des utilisateurs non-système sous Linux ?

  4. Comment puis-je répertorier tous les utilisateurs verrouillés sous Linux ?

  5. Comment puis-je répertorier les modes vidéo disponibles pour une webcam USB sous Linux ?

Comment répertorier les partitions de disque sous Linux

Comment obtenir la liste des comptes utilisateur MySQL sous Linux

Comment lister les disques sous Linux

Comment répertorier les services sous Linux

Comment obtenir votre adresse IP sous Linux

Comment obtenir une liste de liens symboliques sous Linux