====== 무선 지능형 카메라 기능 구현 목록 ======
무선 지능형 카메라 개발을 위해 구현한 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}}
----