Il est assez facile de faire un scan dans la ligne de commande. Les pages man sont votre ami ici (consultez iwconfig et iwlist). Mais l'utilisation de l'interface C est un peu plus difficile, donc je vais me concentrer là-dessus.
Tout d'abord, comme d'autres personnes l'ont mentionné, certainement télécharger le wireless tools source code. Toute la documentation de l'interface de programmation se trouve dans les fichiers .c. Pour autant que je sache, il n'y a pas de documentation web pour l'API. Cependant, le code source est assez facile à lire. Vous avez à peu près besoin seulement iwlib.h et iwlib.c pour cette question.
Alors que vous pouvez utiliser iw_set_ext
et iw_get_ext
, le libiw met en oeuvre une fonction de balayage de base iw_scan
, à partir de laquelle vous pouvez extraire la plupart des informations que vous avez besoin.
Voici un programme simple pour obtenir l'ESSID pour tous les réseaux sans fil disponibles. Compilez avec -liw
et exécutez 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);
}
AVERTISSEMENT: Ceci est juste un programme de démonstration. Il est possible que certains résultats n'aient pas d'esside. En outre, cela suppose que votre interface sans fil est "wlan0". Vous avez eu l'idée.
Lire le code source iwlib!
Vous n'avez pas besoin d'être root pour exécuter iwlist, mais seulement les valeurs mises en cache de la dernière analyse périodique. Pour forcer une nouvelle analyse, vous devez être root. – Hudson
Hmm, lorsqu'il n'est pas root, il ne renvoie rien, au moins sur Ubuntu 8.04: -/ – richq