가능한 중복 :
Want to know the ESSID of wireless network via C++ in UBUNTUC++ 코드는 관련 네트워크의 BSSID를 찾을 수
안녕하세요
내가 프로젝트의 일부인 다음 코드를 작성했습니다. 현재 연결된 네트워크의 ESSID를 찾는 데 사용됩니다. 그러나 그것은 또한 내가 연결된 무선 네트워크의 ESSID를 표시하는 결점이 있습니다. 즉, 무선 N/W에 자신을 연결하려고 시도하고 그것이 성공하지 못하면 DHCP가 수신되지 않습니다. 내 시도를 한 ESSID를 표시하십시오.
가능한 경우 현재 연결된 무선 네트워크의 BSSID를 찾기 위해 ioctl 호출을 시도해보십시오. n/w는 연결된/표시되지 않은 W/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