나는 Wi-Fi AP에 연결해야하는 Ubuntu Linux 용 소프트웨어를 만들고 있습니다. WiFi 네트워크는 미리 정의되지 않으며 소프트웨어를 한 번 실행하는 동안 여러 번 변경할 수 있습니다 (사용자가 변경을 요청한 사용자 임). 아이디어는 이것입니다 : SSID 세트와 WPA 또는 WEP 암호 문구가 주어지면 소프트웨어는 시스템의 모든 위치에서 구성 파일을 변경할 필요없이 바꿔서 네트워크간에 전환 할 수 있어야합니다.리눅스의 Python에서 보호 된 WiFi에 연결하기
거대한 문제는 연결에 패스워드를 전달하는 것입니다. 여기까지 내가 지금까지 운영해온 것은 다음과 같습니다.
- WiFi 동글이 장착 된 우분투 12.10 기기. 소프트웨어를 실행하고,
- connman 연결을 요청하는 데 사용 될
- 파이썬, 0.79
- wpa_supplicant를 V1.0
- 내가 생각했던 처음에는
D-버스 가능하다면 d- 버스를 통해 connman에게 패스 프레이즈를 전달할 수 있지만이 버전의 connman도 1.11도이 방법을 노출하지 못합니다. 그런 다음 디렉토리에 service_<SSID>.conf
파일을 덤프 할 수 있음을 알았습니다. 파일의 내용은 매우 간단하며 다음과 같이 :이 파일이 생성
[service_SSID]
Type=wifi
Name=Network-SSID
Passphrase=here-goes-the-passphrase
되면, 네트워크에 연결하는 적절한 서비스 net.connman.Service.Connect에 대한 간단한() 메서드 호출을 필요로한다. 문제는 connman이 다시 시작하지 않는 한 config 파일을 구문 분석하지 않는다는 것입니다. 이렇게하려면 sudo 권한과 추가 시간이 필요하며 "지금 무엇이 잘못 될 수 있는지"모든 문제가 발생할 위험이 있습니다. 그런 다음 암호문이 wpa_supplicant d-bus API로 어떻게 든 전달 될 수 있다고 생각했지만 아무것도 찾지 못했습니다.
Google 검색 결과도 실패했습니다. 마치 아무도 이것을하기 전에 시도한 것처럼 보입니다.
sudo iwconfig wlan0 essid <SSID> key s:<PASSPHRASE>
명령의 결과는 SET failed on device wlan0 ; Invalid argument.
입니다. 또한, 내가 피하고 싶습니다 sudo가 필요합니다.
나는 wpa_gui 프로그램이 그 마법을 어떻게하는지 알아 내려고 노력했다. 우선 sudo가 필요하다는 것을 발견했으며, 많은 명령을 직접 /var/run/wpa_supplicant/wlan0
에 보냈습니다. 더 단순한 것을 찾지 못한다면이 행동을 복제하는 것이 최후의 수단이 될 것입니다.
큰 질문은 다음과 같습니다. WEP/WPA로 보호 된 WiFi 네트워크에 연결하기 위해 Python을 사용하는 방법은 무엇입니까?
connman을 사용하는 것이 좋은 방법인지, 네트워크 관리자 (Ubuntu의 기본값)로 되돌려서는 안되는지 궁금합니다.
WEP의 보안 규정이 무엇인지 말해 줄 수 있습니까? – Natim
죄송합니다. WEP에서이 작업을 수행하는 방법을 조사 할 필요가 없으므로 여기서 도와 드릴 수 없습니다. 그래도 많이 다르다고 나는 상상할 수 없다. – ZalewaPL
@ ZalewaPL 마지막 답장을 한 지 거의 1 년 전이지만이 [link] (https://developer.gnome.org/NetworkManager/unstable/spec.html#org.freedesktop.NetworkManager)에 따르면 보안 (WEP, WPA2 등)의 유형을 입력해야 할 필요가있을뿐 암호 (psk)를 입력하면됩니다. AddAndActivateConnection의 첫 번째 매개 변수 인용 :'연결 설정 및 속성; 주어진 장비와 특정 개체를 사용하여 불완전한 누락 설정이 자동으로 완료되면 ** security ** 및 ** key-mgmt ** ** connection_params **를 제거하고 성공적으로 연결했습니다. :) – kv1dr