-
-
Save taylor224/516de7dd0b707bc0b1b3 to your computer and use it in GitHub Desktop.
# -*- coding: utf-8 -*- | |
import wifi | |
def Search(): | |
wifilist = [] | |
cells = wifi.Cell.all('wlan0') | |
for cell in cells: | |
wifilist.append(cell) | |
return wifilist | |
def FindFromSearchList(ssid): | |
wifilist = Search() | |
for cell in wifilist: | |
if cell.ssid == ssid: | |
return cell | |
return False | |
def FindFromSavedList(ssid): | |
cell = wifi.Scheme.find('wlan0', ssid) | |
if cell: | |
return cell | |
return False | |
def Connect(ssid, password=None): | |
cell = FindFromSearchList(ssid) | |
if cell: | |
savedcell = FindFromSavedList(cell.ssid) | |
# Already Saved from Setting | |
if savedcell: | |
savedcell.activate() | |
return cell | |
# First time to conenct | |
else: | |
if cell.encrypted: | |
if password: | |
scheme = Add(cell, password) | |
try: | |
scheme.activate() | |
# Wrong Password | |
except wifi.exceptions.ConnectionError: | |
Delete(ssid) | |
return False | |
return cell | |
else: | |
return False | |
else: | |
scheme = Add(cell) | |
try: | |
scheme.activate() | |
except wifi.exceptions.ConnectionError: | |
Delete(ssid) | |
return False | |
return cell | |
return False | |
def Add(cell, password=None): | |
if not cell: | |
return False | |
scheme = wifi.Scheme.for_cell('wlan0', cell.ssid, cell, password) | |
scheme.save() | |
return scheme | |
def Delete(ssid): | |
if not ssid: | |
return False | |
cell = FindFromSavedList(ssid) | |
if cell: | |
cell.delete() | |
return True | |
return False | |
if __name__ == '__main__': | |
# Search WiFi and return WiFi list | |
print Search() | |
# Connect WiFi with password & without password | |
print Connect('OpenWiFi') | |
print Connect('ClosedWiFi', 'password') | |
# Delete WiFi from auto connect list | |
print Delete('DeleteWiFi') |
I am getting an error like this. wifi.exceptions.InterfaceError: b"wlan0 Interface doesn't support scanning.".
Any help is appreciated.
run ifconfig , and see ur interface, it is likely not wlan0, but something like wlp2s0
hi, any body please help
i have struck with the following error when i tried to connect to the Cell(ssid=Vamsi).[Cell(ssid=SPVF), Cell(ssid=Vamsi), Cell(ssid=Guest), Cell(ssid=ACT_Dlink3Pole)]
Traceback (most recent call last):
File "/home/pi/Desktop/configread.py", line 104, in
print(Connect('Vamsi', '12345678'))
File "/home/pi/Desktop/configread.py", line 49, in Connect
scheme = Add(cell, password)
File "/home/pi/Desktop/configread.py", line 81, in Add
scheme.save()
File "/home/pi/.local/lib/python3.5/site-packages/wifi/scheme.py", line 135, in save
with open(self.interfaces, 'a') as f:
PermissionError: [Errno 13] Permission denied: '/etc/network/interfaces'
Did you find solution for this
Struck Here Some Help Please
cells = wifi.Cell.all('wlan0')
Traceback (most recent call last):
File "", line 1, in
File "G:\Python\lib\site-packages\wifi\scan.py", line 38, in all
iwlist_scan = subprocess.check_output(['/sbin/iwlist', interface, 'scan'],
File "G:\Python\lib\subprocess.py", line 411, in check_output
return run(*popenargs, stdout=PIPE, timeout=timeout, check=True,
File "G:\Python\lib\subprocess.py", line 489, in run
with Popen(*popenargs, **kwargs) as process:
File "G:\Python\lib\subprocess.py", line 854, in init
self._execute_child(args, executable, preexec_fn, close_fds,
File "G:\Python\lib\subprocess.py", line 1307, in _execute_child
hp, ht, pid, tid = _winapi.CreateProcess(executable, args,
FileNotFoundError: [WinError 2] The system cannot find the file specified
Struck Here Some Help Please
cells = wifi.Cell.all('wlan0')
Traceback (most recent call last):
File "", line 1, in
File "G:\Python\lib\site-packages\wifi\scan.py", line 38, in all
iwlist_scan = subprocess.check_output(['/sbin/iwlist', interface, 'scan'],
File "G:\Python\lib\subprocess.py", line 411, in check_output
return run(*popenargs, stdout=PIPE, timeout=timeout, check=True,
File "G:\Python\lib\subprocess.py", line 489, in run
with Popen(*popenargs, **kwargs) as process:
File "G:\Python\lib\subprocess.py", line 854, in init
self._execute_child(args, executable, preexec_fn, close_fds,
File "G:\Python\lib\subprocess.py", line 1307, in _execute_child
hp, ht, pid, tid = _winapi.CreateProcess(executable, args,
FileNotFoundError: [WinError 2] The system cannot find the file specified
It is because you are on windows 10.
I am looking for the interface to enter for windows 10 too ...
this is needed root access only?
any idea without root access?
Struck Here Some Help Please
cells = wifi.Cell.all('wlan0')
Traceback (most recent call last):
File "", line 1, in
File "G:\Python\lib\site-packages\wifi\scan.py", line 38, in all
iwlist_scan = subprocess.check_output(['/sbin/iwlist', interface, 'scan'],
File "G:\Python\lib\subprocess.py", line 411, in check_output
return run(*popenargs, stdout=PIPE, timeout=timeout, check=True,
File "G:\Python\lib\subprocess.py", line 489, in run
with Popen(*popenargs, **kwargs) as process:
File "G:\Python\lib\subprocess.py", line 854, in init
self._execute_child(args, executable, preexec_fn, close_fds,
File "G:\Python\lib\subprocess.py", line 1307, in _execute_child
hp, ht, pid, tid = _winapi.CreateProcess(executable, args,
FileNotFoundError: [WinError 2] The system cannot find the file specifiedIt is because you are on windows 10.
I am looking for the interface to enter for windows 10 too ...
did you found any solution?
Struck Here Some Help Please
cells = wifi.Cell.all('wlan0')
Traceback (most recent call last):
File "", line 1, in
File "G:\Python\lib\site-packages\wifi\scan.py", line 38, in all
iwlist_scan = subprocess.check_output(['/sbin/iwlist', interface, 'scan'],
File "G:\Python\lib\subprocess.py", line 411, in check_output
return run(*popenargs, stdout=PIPE, timeout=timeout, check=True,
File "G:\Python\lib\subprocess.py", line 489, in run
with Popen(*popenargs, **kwargs) as process:
File "G:\Python\lib\subprocess.py", line 854, in init
self._execute_child(args, executable, preexec_fn, close_fds,
File "G:\Python\lib\subprocess.py", line 1307, in _execute_child
hp, ht, pid, tid = _winapi.CreateProcess(executable, args,
FileNotFoundError: [WinError 2] The system cannot find the file specifiedIt is because you are on windows 10.
I am looking for the interface to enter for windows 10 too ...did you found any solution?
Yes:
Here you are (old code that worked a long time ago^^)
import os
from sys import platform
import time
if platform in ["win32", "linux"]:
import pywifi
from pywifi import const
import subprocess
import re
def main(ssid, psk, timeout):
print("Wifi connecting: SSID {0} ".format(ssid))
if ssid == get_current_wifi():
print("Wifi already connected to {0}".format(ssid))
return
connect_wifi(ssid, psk, int(timeout))
def create_wifi_interface():
print("Creating wifi interface")
wifi = pywifi.PyWiFi()
return wifi.interfaces()[0]
def disconnect_wifi(timeout, interface):
print("Disconnect wifi")
interface.disconnect()
t_0 = time.time()
while not (interface.status() in [const.IFACE_DISCONNECTED,
const.IFACE_INACTIVE]):
if time.time() - t_0 > timeout:
raise TimeoutError
time.sleep(0.1)
print(".", end="")
print("Disconnect wifi succes!")
def connect_wifi(ssid, psk, timeout):
print("Connect wifi for {0}".format(platform))
interface = create_wifi_interface()
disconnect_wifi(timeout, interface)
profile = pywifi.Profile()
profile.ssid = ssid
profile.auth = const.AUTH_ALG_OPEN
profile.akm.append(const.AKM_TYPE_WPA2PSK)
profile.cipher = const.CIPHER_TYPE_CCMP
profile.key = psk
interface.remove_all_network_profiles()
tmp_profile = interface.add_network_profile(profile)
interface.connect(tmp_profile)
t_0 = time.time()
while not (interface.status() == const.IFACE_CONNECTED):
if time.time() - t_0 > timeout:
raise TimeoutError
time.sleep(0.1)
print(".", end="")
print("\n", "Connect wifi succes!")
def get_current_wifi():
print("Get current wifi for {0}".format(platform))
ssid = ""
if platform == "win32": # Windows
try:
ssid = get_current_wifi_windows()
except subprocess.CalledProcessError:
pass
elif platform == "linux":
try:
ssid = get_current_wifi_linux()
except AttributeError:
pass
else:
raise OSError
print("Current ssid {0}".format(ssid))
return ssid
def get_current_wifi_linux():
network_information = os.popen('/sbin/iwconfig | grep ESSID').read()
ssid = re.search('ESSID:"(.*)"', network_information).group(1)
return ssid
def get_current_wifi_windows():
network_information = str(subprocess.check_output(["netsh", "wlan", "show", "network"]))
network_information = network_information.replace('\\r', '')
network_information = network_information.replace("b' ", '')
network_information = network_information.replace(":", '\n')
network_information = network_information.replace("\\n", '\n')
network_information = network_information.splitlines()
ssid = network_information[6][1:]
return ssid
To make it work on windows 10 just use:
subprocess.check_output(["netsh", "wlan", "show", "network"])
Hi, I am getting this error. What may be wrong?
[Cell(ssid=mySSID)]
Traceback (most recent call last):
File "/home/pi/wifi_con.py", line 89, in <module>
print(Connect('mySSID', '@key12345'))
File "/home/pi/wifi_con.py", line 34, in Connect
savedcell.activate()
File "/home/pi/.local/lib/python3.9/site-packages/wifi/scheme.py", line 172, in activate
subprocess.check_output(['/sbin/ifdown', self.interface], stderr=subprocess.STDOUT)
File "/usr/lib/python3.9/subprocess.py", line 424, in check_output
return run(*popenargs, stdout=PIPE, timeout=timeout, check=True,
File "/usr/lib/python3.9/subprocess.py", line 528, in run
raise CalledProcessError(retcode, process.args,
subprocess.CalledProcessError: Command '['/sbin/ifdown', 'wlan0']' returned non-zero exit status 1.
Guys…can you give me pls an answer of this question…my devise is not rooted..
Can this script run without any problems ???
Hi!
Any solution for the returned non-zero error returned by the scheme.activate() method?
Here is the complete error message below:
Traceback (most recent call last):
File "/home/pi/projects/wifi_connect.py", line 106, in
print(Connect('test', '12345678'))
File "/home/pi/projects/wifi_connect.py", line 54, in Connect
scheme.activate()
File "/home/pi/.local/lib/python3.9/site-packages/wifi/scheme.py", line 172, in activate
subprocess.check_output(['/sbin/ifdown', self.interface], stderr=subprocess.STDOUT)
File "/usr/lib/python3.9/subprocess.py", line 424, in check_output
return run(*popenargs, stdout=PIPE, timeout=timeout, check=True,
File "/usr/lib/python3.9/subprocess.py", line 528, in run
raise CalledProcessError(retcode, process.args,
subprocess.CalledProcessError: Command '['/sbin/ifdown', 'wlan0']' returned non-zero exit status 1.
I am getting an error like this. wifi.exceptions.InterfaceError: b"wlan0 Interface doesn't support scanning.".
Any help is appreciated.