可能重複:
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;
}
據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