====== 무선 지능형 카메라 기능 구현 목록 ====== 무선 지능형 카메라 개발을 위해 구현한 Wi-Fi 기능 목록을 정리했다. ===== AP 스캔 결과 얻어오는 함수 ===== Soft AP 로 동작했을 때는 iwlist 명령어로 Station 모드로 동작할 때는 wps_supplicant 로 각각 동작하기 때문에 각기 다른 포맷 스캔 결과값을 파싱해서 사용해야 한다. ==== iwlist ==== 스캔 결과 값중 필요한 것은 'SSID/RSSI/암호화방식' 이다. 이들 중 가장 까다로운 것이 암호화 방식이다. | SSID | ESSID:"itx" | | RSSI | Signal level=-33 dBm | | 공유기설정 | iwlist 목록에 출력 결과 | | 암호없음 | Encryption key:off | | WEP | Encryption key:on | | WPAPSK-TKIP | Encryption key:on, IE: WPA Version 1, Group Cipher : TKIP | | WPAPSK-AES | Encryption key:on, IE: WPA Version 1, Group Cipher : CCMP | | WPA2PSK-TKIP | Encryption key:on, IE: IEEE 802.11i/WPA2 Version 1, Group Cipher : TKIP | | WPA2PSK-AES | Encryption key:on, IE: IEEE 802.11i/WPA2 Version 1, Group Cipher : CCMP | # ./iwlist wlan0 scan Completed -51 on jimook -63 on jusin WPA2 CCMP -30 on IP-CAM WPA2 CCMP -23 on itx WPA2 TKIP -52 on jykim WPA2 CCMP -51 on SS1 WPA2 TKIP WPA TKIP -61 on ITX[SQE] WPA TKIP -47 on term WPA TKIP WPA2 TKIP -31 on mmyy WPA2 CCMP -76 on WPA2 CCMP -52 on ss3 WPA TKIP WPA2 TKIP -59 on theweak WPA2 CCMP -41 on term-test WPA TKIP WPA2 TKIP -78 on ollehEgg_417 WPA TKIP WPA2 TKIP -62 on iptime_c3f9 WPA2 CCMP -52 on WPA2 TKIP WPA TKIP -61 on TEST 1234 WPA CCMP WPA2 CCMP -76 on Team01 WPA TKIP WPA2 TKIP -81 off wifi_test -82 on U+NetCEA3 WPA2 CCMP -66 on SQE_KIM WPA2 CCMP 출력 포맷의 형식은 이렇다. | RSSI | 암호화 여부(Y/N) | SSID | WPA1 또는 WPA2 | TKIP 또는 AES(CCMP) | 암호 인증 구분 알고리즘은 다음과 같다. - off 가 검색되면, 암호없음 - on 이 검색되고, WPA 또는 WPA2 가 검색되면, WEP - WPA 가 검색되면, WPA1 - WPA2 가 검색되면, WPA2 - TKIP 가 검색되면, TKIP 이고, CCMP 가 검색되면, AES ==== wpa_supplicant ==== wpa_supplicant 는 좀더 직관적이다. | 공유기설정 | iwlist 목록에 출력 결과 | | 암호없음 | [ESS] | | WEP | [WEP][ESS] | | WPAPSK-TKIP | [WPA-PSK-TKIP][ESS] | | WPAPSK-AES | [WPA-PSK-CCMP][ESS] | | WPA2PSK-TKIP | [WPA2-PSK-TKIP][ESS] | | WPA2PSK-AES | [WPA2-PSK-CCMP][ESS] | wpa_supplicant 상의 ap 목록 리스트 포맷을 변경하기 위해 ctrl_iface.c 파일을 아래와 같이 수정했다. # ./wpa_cli -p /var/run/wpa_supplicant/ scan_results Selected interface 'wlan0' itx -29 [WPA2-PSK-TKIP+CCMP][ESS] mmyy -39 [WPA2-PSK-CCMP][ESS] term-test -49 [WPA-PSK-TKIP+CCMP][WPA2-PSK-TKIP+CCMP][ESS] term -51 [WPA-PSK-TKIP+CCMP][WPA2-PSK-TKIP+CCMP][ESS] SS1 -54 [WPA-PSK-TKIP+CCMP][WPA2-PSK-TKIP+CCMP][ESS] theweak -56 [WPA2-PSK-CCMP][ESS] iptime_c3f9 -56 [WPA2-PSK-CCMP][ESS] jykim -57 [WPA2-PSK-CCMP][ESS] ss3 -57 [WPA-PSK-TKIP+CCMP][WPA2-PSK-TKIP+CCMP][ESS] IP-CAM -59 [WPA2-PSK-CCMP][ESS] kkm -60 [WPA-PSK-TKIP][WPA2-PSK-TKIP][ESS] -60 [WPA-PSK-TKIP+CCMP][WPA2-PSK-TKIP+CCMP][ESS] TEST 1234 -61 [WPA-PSK-CCMP][WPA2-PSK-CCMP][ESS] jusin -64 [WPA2-PSK-CCMP][ESS] ITX[SQE] -68 [WPA-PSK-TKIP][ESS] ollehEgg_087 -70 [WPA2-PSK-TKIP+CCMP][ESS] -72 [WPA2-PSK-CCMP][ESS] ollehEgg_417 -83 [WPA-PSK-TKIP+CCMP][WPA2-PSK-TKIP+CCMP][ESS] U+NetCEA3 -83 [WPA2-PSK-CCMP][ESS] U+zone -84 [WPA2-EAP-CCMP][ESS] jimook -61 [WEP][ESS] wifi_test -81 [ESS] 출력 포맷의 형식은 이렇다. | SSID | RSSI | 암호화 | 암호 인증 구분 알고리즘은 다음과 같다. - 가장 처음 ESS 가 나오는 경우, 암호 없음 - 가장 처음 WEP 가 나오는 경우, WEP - WPA 가 나오면, - ESS 출력 삭제할 것 ==== 파싱 함수 ==== #awk '{print $3"\t"$1"\t"$2$4}' scan === 파일 첫줄 삭제 스크립트 === #tail -n +2 파일명 ===== 접속 상태 얻어오는 함수 ===== #wpa_cli -p /var/run/wpa_supplicant -i wlan0 status 위와 같이 명령어를 실행하면, 현재의 접속 상태를 알 수 있다. 이들 정보 중에 wpa_state 값만 읽어보면, 상태를 알 수 있다. | wpa_state | INACTIVE / DISCONNECTED / SCANNING / ASSOCIATED / COMPLETED | ==== 접속 정보 저장 포맷(wpa_supplicant) ==== wpa_supplicant 에서 save_config 명령시 저장되는 포맷은 다음과 같다. #open network={ ssid="itx" key_mgmt=NONE } #wep40-open network={ ssid="itx" key_mgmt=NONE wep_key0="aaaaa" } #wep40-shared network={ ssid="itx" key_mgmt=NONE auth_alg=SHARED wep_key0=1234567890 } #wep104-open network={ ssid="itx" key_mgmt=NONE wep_key0="ccccccccccccc" } #wep104-shared network={ ssid="itx" key_mgmt=NONE auth_alg=SHARED wep_key0=12345678901234567890123456 } #wpa network={ ssid="itx" psk="77777777" } 위 4가지 상태 중 하나로 존재한다. ===== 동작 시나리오 ===== | 암호없음 | 해당 SSID 를 클릭했을 때, SSID 창에 자동 입력 | | WEP | 해당 SSID 를 클릭했을 때, SSID 창에 자동 입력되고, 보안 인증모드 WEP 로 변경되고, 64/128bit, 문자/HEX 선택할 수 있는 박스 출력 | | WPA | 해당 SSID 를 클릭했을 때, SSID 창에 자동 입력되고, 보안 인증모드 WPA 로 변경되고, 암호 입력창 출력 | ====== 수정되어야할 사항 ====== ===== WiFi_GetScanResult ===== 자동으로 스캔한 값을 읽어오는 것 외에, 직접 스캔 명령을 내려서 얻은 스캔 결과값을 읽어오는 루틴이 필요함. 이 경우, 기존의 함수에서 추가 인자값을 통해 이를 구분하여 처리함. ===== WiFi_GetStatus ===== WEP 로 접속되었을 때의 접속여부 판단안되는 문제. 결국 실제 할당 받은 IP 를 가지고 외부와의 통신이 가능한지 여부를 통해 판단해야 한다. ===== WiFi_SetConnection ===== Factory 또는 Normal 모드인지를 구분하여, Factory 모드에서는 입력받은 정보들을 DB 에 저장만 하고, Normal 모드에서는 저장 및 접속 시도를 한다. ---- {{indexmenu>:#1|skipns=/^(wiki|etc|diary|playground)$/ skipfile=/^(todays|about|guestbook)$/ nsort rsort}} ----