蓝森林首页 | 返回主页 | 本站地图 | 站内搜索 | 联系信箱 |
 您目前的位置:首页 > 自由软件 > 技术交流 > 应用编程


    

蓝森林 http://www.lslnet.com 2006年6月6日 10:18


请教:如何在程序里取网络接口列表及属性?

我的系统是REDHAT LINUX 8,需要取像ifconfig -a命令显示的东东。
多谢了!

请教:如何在程序里取网络接口列表及属性?

man ioctl

请教:如何在程序里取网络接口列表及属性?

这个问题已经解决,我把调试过的代码公布上来,供后来者参考。
我还需要取这个接口的速度,如:是100M还是1000M,如何做到?
ioctl好像无能为力呀?

int get_interface ()
{
    int soc;
    struct ifconf ifc;
    struct ifreq ifreq [32];

    if ((soc = socket(AF_INET, SOCK_DGRAM, 0)) < 0)
    {
                fprintf(stderr, "socket(AF_INET): %s\n",strerror(errno));
                return -10;
    }

    bzero((char *) &ifc, sizeof(ifc));
    ifc.ifc_len = sizeof(ifreq);
    ifc.ifc_buf = (char*) ifreq;

    if (ioctl(soc, SIOCGIFCONF, (char *) &ifc) < 0)
    {
                fprintf(stderr, "ioctl (SIOCGIFCONF): %s\n",strerror(errno));
                return -20;
    }

        int len = ifc.ifc_len/sizeof(struct ifreq);
    for (int i=0; i<len; i++)
        {
            ifc.ifc_len = sizeof(ifreq[i]);
            ifc.ifc_buf = (char*) &ifreq [i];

                struct ifreq tmp;
                strcpy (tmp.ifr_name, ifreq[i].ifr_name);
        if (ioctl(soc, SIOCGIFFLAGS, (char *) &tmp) < 0)
        {
                fprintf(stderr, "ioctl (SIOCGIFFLAGS): %s\n",
                                                strerror(errno));
                continue;
        }
               
        if ((tmp.ifr_flags & IFF_UP) && !(tmp.ifr_flags & IFF_LOOPBACK) &&
                        ifreq [i].ifr_addr.sa_family == AF_INET)
        {
                struct sockaddr_in *inet_addr =
                                (struct sockaddr_in *) &(ifreq [i].ifr_addr);

                printf("%s: %s\n", ifreq [i].ifr_name,
                                inet_ntoa(inet_addr->;sin_addr));
        }
        }
       
    close(soc);
}

请教:如何在程序里取网络接口列表及属性?

顶一下!

请教:如何在程序里取网络接口列表及属性?

为什么要顶..楼上的不是给你一个例子了吗?

请教:如何在程序里取网络接口列表及属性?

请仔细看下,楼上就是我发的贴呀,我还请教一下:
我还需要取这个接口的速度,如:是100M还是1000M,如何做到?



Copyright © 1999-2000 LSLNET.COM. All rights reserved. 蓝森林网站 版权所有。 E-mail : webmaster@lslnet.com