GNU/Linux >> Znalost Linux >  >> Linux

Jak mohu získat seznam dostupných bezdrátových sítí v systému Linux?

Je docela snadné provést skenování v příkazovém řádku. Manuálové stránky jsou zde vaším přítelem (podívejte se na iwconfig a iwlist ). Ale použití rozhraní C je trochu obtížnější, takže se zaměřím na to.

Za prvé, jak již zmínili jiní lidé, rozhodně si stáhněte zdrojový kód bezdrátových nástrojů. Veškerá dokumentace k programovacímu rozhraní je v .c soubory. Pokud mohu říci, neexistuje žádná webová dokumentace pro rozhraní API. Zdrojový kód je však poměrně snadno čitelný. V podstatě potřebujete pouze iwlib.h a iwlib.c pro tuto otázku.

Zatímco můžete použít iw_set_ext a iw_get_ext , libiw implementuje základní skenovací funkci iw_scan , ze kterého můžete získat většinu informací, které potřebujete.

Zde je jednoduchý program pro získání ESSID pro všechny dostupné bezdrátové sítě. Kompilace s -liw a spustit s 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);
}

PROHLÁŠENÍ:Toto je pouze demonstrační program. Je možné, že některé výsledky nebudou mít essid. Navíc to předpokládá, že vaše bezdrátové rozhraní je "wlan0". Máte nápad.

Přečtěte si iwlib zdrojový kód!


Balíček Wireless Tools – jehož součástí je iwlist – obsahuje také knihovnu Wireless Tools Helper Library. Musíte zahrnout iwlib.h a propojit s libiw.a (tj. přidat -liw). Poté vyhledejte dokumentaci pro iw_set_ext funkce. SIOCSIWSCAN Parametr bude nejužitečnější. Jako příklad použití tohoto rozhraní se podívejte na zdroj KWifiManager v knihovně KDE (viz:Metoda Interface_wireless_wirelessextensions::get_available_networks). Případně si také můžete stáhnout zdrojový kód Wireless Tools a podívat se, jak se funkce iwlib iw_set_ext používá také ke skenování v iwlist.c.

Pokud jde o oprávnění, představuji si, že proces bude muset běžet jako root, aby mohl provést kontrolu. Rád bych věděl, jestli by to šlo udělat i jinak.

Protože používáte Ubuntu 8.04, měl by se vám hodit balíček libiw-dev.


Můžete použít nmcli který nevyžaduje oprávnění root ani název WIFI rozhraní.

nmcli -t -f ssid dev wifi

Linux
  1. Jak vypsat všechna dostupná národní prostředí na RHEL7 Linux

  2. Jak mohu získat stav klávesnice v Linuxu?

  3. Jak mohu zkontrolovat, zda jsou cgroups dostupné na mém hostiteli Linuxu?

  1. Jak vypsat seznam procesů připojených k segmentu sdílené paměti v linuxu?

  2. Jak můžeme získat seznam nesystémových uživatelů na linuxu?

  3. Jak mohu uvést seznam všech zamčených uživatelů v Linuxu?

  1. Jak používat příkaz Linux SS

  2. Jak mohu uvést dostupné režimy videa pro webovou kameru USB v systému Linux?

  3. Jak mohu získat seznam všech chybně napsaných slov v textu pomocí Linuxu?