關於linux 下擷取本機網關 ip mac 子網路遮罩的代碼

來源:互聯網
上載者:User
int get_gw(char *gw){    FILE *fp;      char buf[1024];      char cmd[1024];      char *tmp;        strcpy(cmd, "ip route");      fp = popen(cmd, "r");      if(NULL == fp)      {          perror("popen error");        return -1;    }      while(fgets(buf, sizeof(buf), fp) != NULL)      {          tmp =buf;         while(*tmp && isspace(*tmp))              ++ tmp;          if(strncmp(tmp, "default", strlen("default")) == 0)              break;      }      sscanf(buf, "%*s%*s%s", gw); //過濾前面兩個字串          pclose(fp);      return 0;}
gateway是通過 ip route命令擷取 
int get_mac_ip_mask(char *ifname,char *mac1,char *ip,char *mask){    int sock;    struct ifreq ifr;    unsigned char mac[6];    sock = socket(AF_INET,SOCK_STREAM,0);    if(sock<0)    {      perror("socket error!\n");      return -1;    }        strcpy(ifr.ifr_name,ifname);        if((ioctl(sock,SIOCGIFHWADDR,&ifr) )== 0)    {      memcpy(mac,ifr.ifr_hwaddr.sa_data,6);      //printf("%s mac address is :%02X:%02X:%02X:%02X:%02X:%02X\n","eth0",mac[0],mac[1],mac[2],mac[3],mac[4],mac[5] );      sprintf(mac1,"%02X-%02X-%02X-%02X-%02X-%02X",mac[0],mac[1],mac[2],mac[3],mac[4],mac[5]);    }    else    {      perror("ioctl error!\n");      return -1;    }        if((ioctl(sock, SIOCGIFADDR, &ifr)) == 0)    {       sprintf(ip,"%.15s", inet_ntoa(((struct sockaddr_in*)&(ifr.ifr_addr))->sin_addr));    }    else    {      perror("ioctl error!\n");      return -1;    }        if((ioctl( sock, SIOCGIFNETMASK, &ifr)) == 0)    {       //sprintf(ip,"%.15s", inet_ntoa(((struct sockaddr_in*)&(ifr.ifr_addr))->sin_addr));          sprintf(mask, "%.15s",inet_ntoa((( struct sockaddr_in * )&( ifr.ifr_netmask ))->sin_addr));            }    else    {      perror("ioctl error!\n");      return -1;    }                close(sock);    return 0;  }

其中ifname  指的是哪個網口  eth0 。。eth1 之類 mac ip  mask 都是通過ioctl 這個函數擷取

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.