wireless adapter를 monitor mode로 설정해 놓고 packet capture를 하는 경우 5분 정도 지나서 packet 수집이 실패(pcap_next_ex의 return값이 -1)가 되는 경우가 있다. 이러한 현상이 발생하는 것에는(여러가지 요인이 있을 수 있겠지만) linux의 경우 NetworkManager라는 프로세스가 monitor mode interface를 임의로 제어하기 때문에 발생한다.

예를 들어 wlan0는 인터넷을 사용하기 위한 managed mode, wlan1는 801 packet을 수집하기 위한 용도로 사용하려고 한다고 가정하자. 하지만 NetworkManager라는 프로세스가 wlan1을 managed mode로 바꾸고 일련의 행위(iwlist wlan1 scan과 같은)를 해 버린다면 당연히 wlan1 packet 수집에 실패하고 만다.

이에 대처하기 위한 방법은 여러가지가 있을 수 있다.


1. 관련 프로세스를 죽여 버린다.

NetworkManager 뿐만 아니라 network interface를 제어하는 다양한 프로세스가 존재한다. airmon-ng(binary executable이 아닌 text script임) 997 line을 보면 다음과 같은 소스를 확인할 수 있다.

PROCESSES="wpa_action\|wpa_supplicant\|wpa_cli\|dhclient\|ifplugd\|dhcdbd\|dhcpcd\|udhcpc\|NetworkManager\|knetworkmanager\|avahi-autoipd\|avahi-daemon\|wlassistant\|wifibox"


"airmon-ng check kill"이라는 명령어를 수행하면 현재 실행되어 지고 있는 모든 프로세스들을 조사하여 network interface 제어 가능성이 있을 거라고 판단되는 프로세스들을 이름을 기준으로 내려 버린다.

이러한 프로세스를 죽여 버리면 monitor mode interface는 제대로 작동하게 되지만 네트워크 관련 프로세스들이 죽어 버리기 때문에 네트워크(인터넷)를 사용할 수 없게 되어 버린다. 이를 위하여 wpa_passphrase, wpa_supplicant, dhclient 명령어를 통해 수동으로 인터넷에 접속할 수 있는 방법을 별도로 익히도록 해야 한다.

airmon-ng check kill
wpa_supplicant -iwlan0 -c<(wpa_passphrase myap mypassword) -B
dhclient wlan0



2. 코드상으로 처리한다.

packet 수집이 실패(pcap_next_ex)하게 되면 코드상으로 pcap_close를 호출한 이후 1초 정도 지나 다시 pcap_open을 호출하여 packet 수집을 계속하면 된다.


airodump-ng와 같은 프로그램은 2번과 같은 방식을 사용하지만, wireshark나 tcpdump와 같은 기존 well-knwon 툴들이 이와 같은 방식을 지원하지 않기 때문에 1번 방식을 이용하는 것을 권장한다.