C ++ код для поиска BSSID OF связанной сети - PullRequest
1 голос
/ 13 мая 2011

Здравствуйте, я написал следующий код, который является частью проекта.Он используется для поиска ESSID текущей связанной сети.

Но у него есть недостаток: он также отображает ESSID сети, с которой я не связан , т.е. если я пытаюсь связать себя с беспроводной н / ж и еслиэто неудачно, т.е. NO DHCP OFFERS ARE RECEIVED, тогда также будет отображаться то ESSID, с которым я предпринял попытку.

Может ли кто-нибудь дать мне ioctl звонок, чтобы найти BSSID текущего связанного беспроводного н / ж? .На мой взгляд, это единственный способ, которым я могу пометить ч / б как ассоциированные, так и не ассоциированные.

КОД: -

 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;
 }
...