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