免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 6087 | 回复: 2
打印 上一主题 下一主题

linux下获得本机ip的问题!!! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-04-29 15:32 |只看该作者 |倒序浏览
想获得本机ip,代码是论坛里以前贴出来的,稍微改了一下。
我的问题是,
总共有三个接口,eth0,eth1,lo,都是up的。
但是程序显示都是DOWN的,
我man了netdevice,没有问题,gdb了一下,发现运行时struct ifreq好像没有ifr_flags,有一个ifru_flags,但是换了这个又编译不过去,
这是怎么回事?

代码如下:(rh8.0)

#include <stdio.h>;
#include <sys/types.h>;
#include <sys/param.h>;

#include <sys/ioctl.h>;
#include <sys/socket.h>;
#include <net/if.h>;
#include <netinet/in.h>;
#include <net/if_arp.h>;
void get_ip()
{
        struct ifreq if_buf[16];
        struct ifconf        ifc;
        int fd, interface;
        if ((fd = socket(AF_INET, SOCK_DGRAM, 0)) >; 0)
        {
                ifc.ifc_len = sizeof(if_buf);
                ifc.ifc_buf = (caddr_t)if_buf;
                if (!ioctl (fd, SIOCGIFCONF, (char *)&ifc))
                {
                        interface = ifc.ifc_len/sizeof(struct ifreq);
                        printf("%d interfaces\n", interface);
                        while (interface-- >; 0)
                          {
                                    printf ("net device %s\n", if_buf[interface].ifr_name);
                                    if (if_buf[interface].ifr_flags & IFF_UP)
                                        puts("the interface status is UP";
                                    else
                                        puts("the interface status is DOWN";
                               
                                if (!(ioctl (fd, SIOCGIFADDR, (char *) &if_buf[interface])))
                                {
                                         puts ("IP address is:";
                                         puts(inet_ntoa(((struct sockaddr_in*)(&if_buf[interface].ifr_addr))->;sin_addr));
                                         puts("";
                                           //puts (buf[interface].ifr_addr.sa_data);
                                }

                        }
                }
        }
}

main()
{
        get_ip();
}

论坛徽章:
0
2 [报告]
发表于 2004-04-29 16:38 |只看该作者

linux下获得本机ip的问题!!!

#define IFF_UP          0x1             /* interface is up              */

struct ifreq
{
#define IFHWADDRLEN     6
#define IFNAMSIZ        16
        union
        {
                char    ifrn_name[IFNAMSIZ];            /* if name, e.g. "en0" */
        } ifr_ifrn;

        union {
                struct  sockaddr ifru_addr;
                struct  sockaddr ifru_dstaddr;
                struct  sockaddr ifru_broadaddr;
                struct  sockaddr ifru_netmask;
                struct  sockaddr ifru_hwaddr;
                short   ifru_flags;
                int     ifru_ivalue;
                int     ifru_mtu;
                struct  ifmap ifru_map;
                char    ifru_slave[IFNAMSIZ];   /* Just fits the size */
                char    ifru_newname[IFNAMSIZ];
                char *  ifru_data;
                struct  if_settings ifru_settings;
        } ifr_ifru;
};


#define ifr_flags       ifr_ifru.ifru_flags     /* flags                */


ifru_flags是自定义的

论坛徽章:
0
3 [报告]
发表于 2004-04-29 16:51 |只看该作者

linux下获得本机ip的问题!!!

谢谢!!!
我看了if.h,是这样。
但是问题是,为何结果都是down呢?
我ifconfig全是up的阿?faint
这是怎么回事?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP