rockymeza / wifi

[unmaintained] WiFi tools for linux
http://pypi.python.org/pypi/wifi
BSD 2-Clause "Simplified" License
305 stars 151 forks source link

Networking breaks after attempting to connect to an AP with spaces in its name #105

Open drmn4ea opened 8 years ago

drmn4ea commented 8 years ago

Hi, I encountered what looks to be a bug in Wifi 0.3.8. I'm currently using it for a project (https://github.com/drmn4ea/WiSneak) that needs to connect and disconnect to large numbers of public WiFi hotspots, over which the user has no control over the access point name. If a connection attempt is made to an access point with spaces in its name, an invalid /etc/network/interfaces file is generated and no further network management operations will work. For example, the generated interfaces file entry:

iface wlan0-HP-Print-56-ENVY 4500 series inet dhcp wireless-channel auto wireless-essid HP-Print-56-ENVY 4500 series

Result when performing subsequent network operations:

$ ifdown -v wlan0 Reading directory /etc/network/interfaces.d /etc/network/interfaces:28: too many parameters for iface line ifdown: couldn't read interfaces file "/etc/network/interfaces"

The space in the 'wireless-essid' line may or may not also be a problem, but APs with a blank network name (e.g. '' or only spaces) will also fail.

It looks like it is legal to solve these by putting quotes around the generated interface name (http://askubuntu.com/questions/50876/how-to-connect-to-a-wireless-network-that-has-a-two-word-name-with-a-space). This may run down a rabbit hole (now, what if the interface name contains quotes?). Since the interface file entries are generated by Wifi and not a human, it might make sense to eliminate the 'wireless-essid My AP Name' line entirely and replace it with 'wireless-ap C0:FF:EE:C0:FF:EE' instead. This avoids any issues with cute ESSIDs, and avoids ambiguity when multiple APs with the same name are in range (I can count at least 6 'xfinitywifi' APs from my living room).

Tl;DR:

Thanks!

EDIT: Several Internet references suggest using a line with the format 'wireless-bssid C0FFEEC0FFEE' to specify BSSID. This did not work for me. According to the documentation for 'iwlist' etc., the option name should be 'ap' and not 'bssid'. Using 'wireless-ap C0:FF:EE:C0:FF:EE' (with colons; I haven't tried it without) worked for me.

rockymeza commented 8 years ago

hmm. To be honest, I'm not sure how long we can go on storing stuff in the network interfaces file. It seems that other distributions use the file differently and sometimes don't even have one.

You don't have to use the SSID as the scheme name if you want to avoid spaces. You can specify a name yourself. Here's an example using the command line interface:

#  wifi -i wlan0 config zza blahblah
passkey> s3cret
iface wlp3s0-zza inet dhcp
    wpa-psk XXXXXXXXXXXXXXXXXXXXXXXXXX
    wpa-ssid Blah Blah Net
    wireless-channel auto