2014-01-21 2 views
2

b/g 인터페이스에서 WiFi를 스캔하고 각 채널에 100ms를 소비하여 각 채널에서 패킷을 스니핑하고 싶습니다. 내가 가진 가장 큰 요구 사항 중 하나는 (디스크 공간이 적어서) 패킷을 저장하지 않고, 내 응용 프로그램이 패킷을 구문 분석하고 MAC 및 RSSI를 검색하며 목록 (MAC, 평균 RSSI, # 레코드)을 구성합니다. 매분마다이 목록을 지우고 다시 시작하십시오.리눅스에서 채널 호핑을 사용하는 패킷 스니핑

나는 리눅스에 채널 홉을 수행하는 두 가지 방법을 알아 냈어요 :

옵션 1 : 사용 wi_set_channel (구조체 WIF의 *, 채널 번호) C에서 시스템 호출, 및 C 코드를 작성 모든 패킷

을 도청

옵션 2 : 사용 리눅스 명령 IW 설정 채널 4을 wlan0 dev에, 그리고 패킷을 도청 파이썬 + scapy 또는 C와 같은 언어를 사용

와이파이 인터페이스가 다른 채널로 전환하는 지연/대기가 최소화되도록 둘 중 어떤 것이 더 효율적인지 알고 싶습니다. 이 지연은 패킷 손실을 의미하는 반면 다른 채널로의 전환은 일어난다 고 생각합니다.

저는 리눅스에서이 문제를 해결하는 다른 방법을 알고 싶습니다.

답변

1

첫 번째 질문에 대한 답은 간단합니다. Option1을 사용하고 채널에서 수집 한 패킷과 순서대로 처리하는 두 번째 스레드로 메모리 내 순환 버퍼를 채우는 두 스레드가 있습니다. 측정 된 스레드 처리 성능 및 기타 요소 (있는 경우)에 따라 최적의 패킷 폐기 알고리즘을 결정할 수 있습니다.

두 번째 질문에 대해서는 통조림 가공 도구에 의존하기보다는 알고리즘을 조정하는 방법을 완벽하게 제어 할 수있는 위의 내용을 살펴볼 것입니다.

+0

옵션 1이 2보다 나은 이유를 알려주십시오. 당신이 말하는 것은 옵션 2를 사용하여 달성 할 수 있습니다. 옵션 1의 채널 전환이 두 번째 옵션보다 더 효율적인지 알고 싶습니다. – Ouroboros

+0

채널 스캔은 옵션 1로만 수행 할 수있는 것이 아닙니다. 모든 채널을 '스캔'해야한다는 필요성을 감안할 때, 프로세스 생성/제거로 커널을 스 래시하지 않아 프로세스 관리에 시간을 투자하는 것이 가장 좋습니다 당신이 패킷 스니핑에 소비했을 수도 있습니다. –

+0

채널 호핑에 대한 어떤 기술이 더 효율적인지 물어 본다면 어떤 것이 효과가 있을까요? 내가이 질문을하는 이유는 옵션 2에서 python + scapy 또는 다른 스크립팅 (또는 비 스크립팅) 언어를 사용하여 제안한 것을 할 수 있기 때문입니다. 원형 버퍼를 구현한다고 가정하면 모든 언어에서 스레드 등이 가능하지만 유일한 차이점은 채널 전환의 오버 헤드입니다. 그러면 어느 것이 더 좋을까요? "wi_set_channel (구조체 wif *, 채널 번호)"또는 "iw dev wlan0 set channel 4"? – Ouroboros

관련 문제