栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何以编程方式找到在Linux中为特定网络设备配置的IP地址/网络掩码/网关?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何以编程方式找到在Linux中为特定网络设备配置的IP地址/网络掩码/网关?

确保使用了ifreq和ioctl()调用的结构,您可以获取所有接口信息:

手册页在这里Ifreq手册页

    typedef struct{        char *iface;        struct ether_addr hwa;        struct in_addr ipa;        struct in_addr bcast;        struct in_addr nmask;        u_short mtu;    } ifcfg_t;         int get_local_info(int rsock, ifcfg_t *ifcfg)    {        struct ifreq ifr;        memset(&ifr, 0, sizeof(ifr));        strncpy(ifr.ifr_name, ifcfg->iface, IF_NAMESIZE);        if((ioctl(rsock, SIOCGIFHWADDR, &ifr)) == -1){ perror("ioctl():"); return -1;        }        memcpy(&(ifcfg->hwa), &ifr.ifr_hwaddr.sa_data, 6);        memset(&ifr, 0, sizeof(ifr));        strncpy(ifr.ifr_name, ifcfg->iface, IF_NAMESIZE);        if((ioctl(rsock, SIOCGIFADDR, &ifr)) == -1){ perror("ioctl():"); return -1;        }        memcpy(&ifcfg->ipa, &(*(struct sockaddr_in *)&ifr.ifr_addr).sin_addr, 4);        memset(&ifr, 0, sizeof(ifr));        strncpy(ifr.ifr_name, ifcfg->iface, IF_NAMESIZE);        if((ioctl(rsock, SIOCGIFBRDADDR, &ifr)) == -1){ perror("ioctl():"); return -1;        }        memcpy(&ifcfg->bcast, &(*(struct sockaddr_in *)&ifr.ifr_broadaddr).sin_addr, 4);        memset(&ifr, 0, sizeof(ifr));        strncpy(ifr.ifr_name, ifcfg->iface, IF_NAMESIZE);        if((ioctl(rsock, SIOCGIFNETMASK, &ifr)) == -1){ perror("ioctl():"); return -1;        }        memcpy(&ifcfg->nmask.s_addr, &(*(struct sockaddr_in *)&ifr.ifr_netmask).sin_addr, 4);        memset(&ifr, 0, sizeof(ifr));        strncpy(ifr.ifr_name, ifcfg->iface, IF_NAMESIZE);        if((ioctl(rsock, SIOCGIFMTU, &ifr)) == -1){ perror("ioctl():"); return -1;        }        ifcfg->mtu = ifr.ifr_mtu;        return 0;    }

快速编辑,此功能要求在调用接口之前已经分配了接口,如下所示:

strcpy(if_cfg->iface, iface)

确保先分配了内存,然后像这样调用

if((get_local_info(sock, if_cfg)) != 0){    printf("Unable to get network device infon");    return -1;}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/417268.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号