Linux에서 사용 가능한 무선 네트워크 목록을 어떻게 얻을 수 있습니까?

StackOverflow https://stackoverflow.com/questions/400240

  •  03-07-2019
  •  | 
  •  

문제

무선 네트워크 목록을 사용할 수 있습니다. 이상적으로 이것은 일부 C 호출을 통한 것이지만 시스템 호출로 Kludge를해야한다고해도 신경 쓰지 않습니다. 필요한 C 호출 또는 프로그램에 이국적인 타사 패키지가 필요하지 않은 경우 더 좋습니다.

인터넷은 내가 사용하는 것을 제안하는 것 같습니다 sudo iwlist <interface> scan 명령 줄에서 트릭을 수행하는 것처럼 보이지만 루트 권한이 필요하지 않습니다. 나는 단지 기본을보고 싶지만 아무것도 바꾸지 않습니다.

도움이 되었습니까?

해결책

그만큼 무선 도구 패키지 - 그 중 IWLIST 부분입니다. 또한 무선 도구 도우미 라이브러리도 포함되어 있습니다. 포함해야합니다 Iwlib.h 그리고 링크 libiw.a (즉, -liw를 추가). 그런 다음 문서를 찾으십시오 IW_SET_EXT 기능. 그만큼 siocsiwscan 매개 변수는 대부분 사용됩니다. 이 인터페이스를 사용하는 방법의 예는 KDE 라이브러리의 kwifimanager 소스를 살펴보십시오 (참조 : 참조 : 참조하십시오. interface_wireless_wirelessextensions :: get_available_networks 방법). 또는 다음을 다운로드 할 수도 있습니다 무선 도구 소스 코드 IWLIB IW_SET_EXT 기능이 iwlist.c에서 스캔하는 데 어떻게 사용되는지 살펴보십시오.

특권은 스캔을 수행하기 위해 프로세스가 루트로 실행되어야한다고 생각합니다. 나는 이것이 다른 방법으로도 할 수 있는지 알고 싶습니다.

Ubuntu 8.04를 사용하고 있기 때문에 libiw-dev 패키지는 사용해야합니다.

다른 팁

명령 줄에서 스캔하는 것은 매우 쉽습니다. 남자 페이지는 여기 당신의 친구입니다 (체크 아웃 iwconfig 그리고 IWLIST). 그러나 C 인터페이스를 사용하는 것은 조금 더 어렵 기 때문에 그에 초점을 맞출 것입니다.

우선, 다른 사람들이 언급했듯이 무선 도구 소스 코드. 프로그래밍 인터페이스의 모든 문서는 .씨 파일. 내가 알 수있는 한, API에 대한 웹 문서는 없습니다. 그러나 소스 코드는 읽기가 매우 쉽습니다. 당신은 거의 필요합니다 Iwlib.h 그리고 Iwlib.c 이 질문을 위해.

사용할 수 있습니다 iw_set_ext 그리고 iw_get_ext,, libiw 기본 스캐닝 기능을 구현합니다 iw_scan, 필요한 대부분의 정보를 추출 할 수 있습니다.

다음은 사용 가능한 모든 무선 네트워크에 대한 ESSID를 얻는 간단한 프로그램입니다. 컴파일 -liw 그리고 달리기 sudo.

#include <stdio.h>
#include <time.h>
#include <iwlib.h>

int main(void) {
  wireless_scan_head head;
  wireless_scan *result;
  iwrange range;
  int sock;

  /* Open socket to kernel */
  sock = iw_sockets_open();

  /* Get some metadata to use for scanning */
  if (iw_get_range_info(sock, "wlan0", &range) < 0) {
    printf("Error during iw_get_range_info. Aborting.\n");
    exit(2);
  }

  /* Perform the scan */
  if (iw_scan(sock, "wlan0", range.we_version_compiled, &head) < 0) {
    printf("Error during iw_scan. Aborting.\n");
    exit(2);
  }

  /* Traverse the results */
  result = head.result;
  while (NULL != result) {
    printf("%s\n", result->b.essid);
    result = result->next;
  }

  exit(0);
}

면책 조항 : 이것은 단지 데모 프로그램 일뿐입니다. 일부 결과에는 Essid가 없을 수 있습니다. 또한 무선 인터페이스가 "WLAN0"이라고 가정합니다. 당신은 아이디어를 얻습니다.

읽기 Iwlib 소스 코드!

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top