무선 지능형 카메라 개발을 위해 구현한 Wi-Fi 기능 목록을 정리했다.

Soft AP 로 동작했을 때는 iwlist 명령어로 Station 모드로 동작할 때는 wps_supplicant 로 각각 동작하기 때문에 각기 다른 포맷 스캔 결과값을 파싱해서 사용해야 한다.

스캔 결과 값중 필요한 것은 '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)

암호 인증 구분 알고리즘은 다음과 같다.

  1. off 가 검색되면, 암호없음
  2. on 이 검색되고, WPA 또는 WPA2 가 검색되면, WEP
  3. WPA 가 검색되면, WPA1
  4. WPA2 가 검색되면, WPA2
  5. TKIP 가 검색되면, TKIP 이고, CCMP 가 검색되면, AES

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 암호화

암호 인증 구분 알고리즘은 다음과 같다.

  1. 가장 처음 ESS 가 나오는 경우, 암호 없음
  2. 가장 처음 WEP 가 나오는 경우, WEP
  3. WPA 가 나오면,
  4. 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 에서 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 로 변경되고, 암호 입력창 출력

수정되어야할 사항

자동으로 스캔한 값을 읽어오는 것 외에, 직접 스캔 명령을 내려서 얻은 스캔 결과값을 읽어오는 루틴이 필요함. 이 경우, 기존의 함수에서 추가 인자값을 통해 이를 구분하여 처리함.

WEP 로 접속되었을 때의 접속여부 판단안되는 문제. 결국 실제 할당 받은 IP 를 가지고 외부와의 통신이 가능한지 여부를 통해 판단해야 한다.

Factory 또는 Normal 모드인지를 구분하여, Factory 모드에서는 입력받은 정보들을 DB 에 저장만 하고, Normal 모드에서는 저장 및 접속 시도를 한다.

  • computer/itx/무선_지능형_카메라_기능_구현_목록.txt
  • Last modified: 3 years ago
  • by likewind