2011-05-13 26 views
0

可能重複:
Want to know the ESSID of wireless network via C++ in UBUNTUC++代碼中查找相關網絡的BSSID

你好

我寫了下面的代碼是一個項目的一部分。它用於查找當前關聯網絡的ESSID。但是它也有缺陷,它也將顯示與我不相關的,即網絡的ESSID,如果我嘗試自己與無線N/W關聯,如果它是unsuccessfull即沒有DHCP擁有接收,那麼它也將顯示我已經嘗試過的那個ESSID。

如果可能,儘量給我一個ioctl調用找到當前相關的無線n的BSSID/W,因爲它是我可以標記B/W相關和不相關的唯一途徑。

CODE:

int main (void) 
{ 
    int errno; 
    struct iwreq wreq; 

    CStdString result = "None"; 

    int sockfd; 
    char * id; 
    char ESSID[100]; 
    memset(&wreq, 0, sizeof(struct iwreq)); 

    if((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) == -1) { 
     fprintf(stderr, "Cannot open socket \n"); 
     fprintf(stderr, "errno = %d \n", errno); 
     fprintf(stderr, "Error description is : %s\n",strerror(errno)); 
     return result ; 
    } 
    CLog::Log(LOGINFO,"Socket opened successfully"); 

    FILE* fp = fopen("/proc/net/dev", "r"); 
    if (!fp) 
    { 
     // TBD: Error 
     return result; 
    } 

    char* line = NULL; 
    size_t linel = 0; 
    int n; 
    char* p; 
    int linenum = 0; 
    while (getdelim(&line, &linel, '\n', fp) > 0) 
    { 
     // skip first two lines 
     if (linenum++ < 2) 
      continue; 

     p = line; 
     while (isspace(*p)) 
     ++p; 

     n = strcspn(p, ": \t"); 
     p[n] = 0; 

     strcpy(wreq.ifr_name, p); 

     id = new char[IW_ESSID_MAX_SIZE+100]; 
     wreq.u.essid.pointer = id; 
     wreq.u.essid.length = 100; 
     if (ioctl(sockfd,SIOCGIWESSID, &wreq) == -1) { 
      continue; 
     } 
     else 
     { 
      strcpy(ESSID,id); 
      return ESSID; 
     } 
     free(id); 
    } 

    free(line); 
    fclose(fp); 
    return result; 
} 
+0

據http://www.cryer.co.uk/glossary/s/ssid.htm,ESSID和BSSID之間的區別是,ESSID適用於與接入點和BSSID無線網絡適用於ad-hoc無線網絡。我想查找通過C++的SSID將使用相同的代碼無論哪種方式,雖然也許有一些API調用會使用不同的標誌。無論如何,您刪除的答案都會清楚地表明您知道您正在複製的帖子,但我認爲您需要在答案中明確提及它以避免被關閉。也許賞金也會有所幫助。 – Brian 2011-05-13 19:13:21

回答

0

你沒有提到你是否在使用一個獨立的基本服務集或沒有(即,ad-hoc網絡,沒有控制接入點),因此,如果你不試圖創建一個ad-hoc網絡,那麼BSSID應該是本地接入點的MAC地址。該ioctl()常量可以用來訪問這些信息是SIOCGIWAP。該ioctl有效載荷信息將在u.ap_addr.sa_data被存儲在您的iwreq結構內。

+0

但是,如果我使用SIOCGIWAP,它會顯示我用來連接的ATTEMPTED所連接的網絡的BSSID。我已經去了iwconfig庫,因爲它使用了一些iw_ether_cmp來檢查bou我無法完全理解它。希望有人能幫助我。 – Alan 2011-05-14 11:01:02