Zarządzanie interfejsami sieciowymi

Przegląd modułów netifaces, python-iwscan i python-wpactrl do zarządzania interfejsami sieciowymi z poziomu Pythona

Moduł netifaces pozwala w prosty sposób uzyskać informacje o dostępnych interfejsach sieciowych. Netifaces działa pod MS Windows, Linuksem, Makiem i innymi uniksowymi systemami. Instalacja sprowadza się do:

easy_install netifaces
A samo wykorzystanie jest równie proste:
import netifaces
# lista dostępnych interfejsów
ifaces = netifaces.interfaces()
print ifaces
# pobieramy dane o podanym interfejsie
print netifaces.ifaddresses(ifaces[0])
Co w efekcie da wynik typu:
['lo', 'eth0', 'wmaster0', 'wlan0', 'ppp0']
{17: [{'peer': '00:00:00:00:00:00', 'addr': '00:00:00:00:00:00'}], 2: [{'peer': '127.0.0.1', 'netmask': '255.0.0.0', 'addr': '127.0.0.1'}]}

Moduł python-iwscan wystawia w Pythonie API dla Linukso/Uniksowego polecenia iwlist scanning umożliwiając z poziomu Pythona na wyszukiwanie punktów dostępowych WiFi. Instalacja wymaga pobrania i skompilowania źródeł z repozytorium projektu. Moduł ten też powinien być już dostępny w niektórych dystrybucjach Linuksa (jako że będzie/jest używany przez najnowszą wersję aplikacji wicd). Oto prosty przykład prezentujący możliwości modułu (należy wykonać go z poziomu konta roota, lub poprzez sudo - równoznaczne z dostępem do iwlist):

import iwscan

wi = iwscan.enum_devices()
for w in wi:
	res = iwscan.WirelessInterface(w).Scan()
	if len(res) < 1:
		print("%-10sBrak wynikow." % w)
	else:
		print("%-10sPrzeskanowane :" % w)
		print res
A przykładowy wynik to:
wlan0     Przeskanowane :
[{'enc': True, 'protocol': None, 'bssid': '00:16:41:C0:13:B3', 'ie': {'pairwise': [], 'version': None, 'group': None, 'auth': [], 'type': None}, 'qual': 38, 'frequency': '2.457 GHz', 'essid': 'neostrada_d7ab', 'stats': 'Quality=38/70  Signal level=-72 dBm  ', 'bitrate': '54 Mb/s', 'channel': 10, 'mode': 'Master'}]
W ramach tego samego projektu rozwijany jest też moduł python-wpactrl udostępniający w Pythonie API wpa_suplicant. Przykładowy skrypt znajduje się w repozytorium modułu.

Dość popularny pod Linuksem Networkmanager także może być obsługiwany za pomocą Pythona. Wystarczy wykorzystać jego API dostępne poprzez D-Busa.

blog comments powered by Disqus

Kategorie

Strony