2013-10-03 109 views
0

我已经写用于打印关于网络接口信息的代码,例如“姓名”,“地址”,“子网掩码”,“MAC地址”。频道频率数

但我想为为wlan0加上“信道频率”我的代码和打印此信息,但我不知道该怎么办。

这是我的代码:

int wlan(){ 

    struct ifreq ifr; 
     int sock, j, k; 
     char *p, addr[32], mask[32], mac[32]; 

     sock=socket(PF_INET, SOCK_STREAM, 0); 
     if (-1==sock) { 
      perror("socket() "); 
      return 1; 
     }  

     strncpy(ifr.ifr_name,"wlan0",sizeof(ifr.ifr_name)-1); 
     ifr.ifr_name[sizeof(ifr.ifr_name)-1]='\0'; 

     if (-1==ioctl(sock, SIOCGIFADDR, &ifr)) { 
      perror("ioctl(SIOCGIFADDR) "); 
      return 1; 
     } 
     p=inet_ntoa(((struct sockaddr_in *)(&ifr.ifr_addr))->sin_addr); 
     strncpy(addr,p,sizeof(addr)-1); 
     addr[sizeof(addr)-1]='\0'; 

     if (-1==ioctl(sock, SIOCGIFNETMASK, &ifr)) { 
      perror("ioctl(SIOCGIFNETMASK) "); 
      return 1; 
     } 
     p=inet_ntoa(((struct sockaddr_in *)(&ifr.ifr_netmask))->sin_addr); 
     strncpy(mask,p,sizeof(mask)-1); 
     mask[sizeof(mask)-1]='\0'; 

     if (-1==ioctl(sock, SIOCGIFHWADDR, &ifr)) { 
      perror("ioctl(SIOCGIFHWADDR) "); 
      return 1; 
     } 
     for (j=0, k=0; j<6; j++) { 
      k+=snprintf(mac+k, sizeof(mac)-k-1, j ? ":%02X" : "%02X", 
       (int)(unsigned int)(unsigned char)ifr.ifr_hwaddr.sa_data[j]); 
     } 
     mac[sizeof(mac)-1]='\0'; 

     printf("\n"); 
     printf("name: %s\n",ifr.ifr_name); 
     printf("address: %s\n",addr); 
     printf("netmask: %s\n",mask); 
     printf("macaddr: %s\n",mac); 
     printf("\n"); 

     close(sock); 
     return 0; 
} 
+0

你想知道接口支持当前正在使用的通道,或频道列表?你可以通过运行'iwlist frequency'来看到相关信息吗? –

+0

我可以通过在linux终端中使用Iwlist来查看此通道号。 – user2836634

+0

'iwconfig wlan0'显示什么?你想要的信息在那里? –

回答