QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1934|回复: 6

如何用c取得本地的IP地址

[复制链接]
发表于 2003-7-14 13:06:26 | 显示全部楼层 |阅读模式
各位大虾:
        小弟在写网络的应用,需要知道本地的IP地址。我使用socket函数来查,代码如下:
        char HostName[128];
        char HostIPAddress[128];
        struct in_addr in;
        gethostname(HostName,12;
        host=gethostbyname(HostName);
        memcpy(&in.s_addr,host->h_addr,4);
        strcpy(HostIPAddress,inet_ntoa(in));
结果是,主机名是正确的,但IP地址总是127.0.0.1 。为什么?
我该如何取到正确的本地IP地址?
ps: 我的计算机是静态分配IP地址的,用ifconfig命令能看见我的地址。网络功能一切正常。
发表于 2003-7-14 13:42:45 | 显示全部楼层
[code:1]
#include <stdio.h>
#include <arpa/inet.h>
#include <sys/ioctl.h>
#include <net/if.h>
main()
{
        int     fd_arp;
        struct  ifreq   ifr;
        char device[32];
        struct sockaddr_in *sin_ptr;
        int i,ret,p[4];

        strcpy(device, "eth0");
        fd_arp = socket(AF_INET, SOCK_PACKET, htons(0x0806));
        strcpy(ifr.ifr_name, device);

        if(fd_arp>=0)
        {
                ret=ioctl(fd_arp, SIOCGIFADDR, &ifr);
                if(ret>=0)
                {
                        sin_ptr = (struct sockaddr_in *)&ifr.ifr_addr;
                        for(i=0;i<4;i++)
                        {
                                p[i]=((sin_ptr->sin_addr.s_addr)>>(i*8))&0xff;
                        }
                        printf("Your IP is: %d.%d.%d.%d\n",p[0],p[1],p[2],p[3]);
                }
        }
}
[/code:1]
回复

使用道具 举报

发表于 2003-7-14 19:45:47 | 显示全部楼层
[code:1]
in_addr& getip()
{
        char hostname[HOSTNAME_LEN];
        hostent *host;
       
        gethostname(hostname, HOSTNAME_LEN);
        host = gethostbyname(hostname);
        return *(in_addr*)(host->h_addr_list[0]);
}
[/code:1]
回复

使用道具 举报

 楼主| 发表于 2003-7-15 00:16:54 | 显示全部楼层
非常感谢斑竹mozilla,我已达到我的目的。也很感谢ShiChao,但是你的方法和我的一样,取其他主机的IP都没有问题,去取本地的IP地址却总是"127.0.0.1"。所以,如果要取本地地址的话,还是要采用斑竹的算法。
回复

使用道具 举报

发表于 2003-7-15 19:53:59 | 显示全部楼层
这好像是一个多网卡的问题。因为我上面的代码是从我windows一个程序中copy过来的,所以没有考虑到这个问题。linux好像是默认有一个loopback网卡巴!
呵呵,我没钱啊,在windows只用一个loopback网卡调试程序,悲惨啊!所以没发现这个问题。

我想知道mozzila的程序是否能在win32执行?
回复

使用道具 举报

发表于 2003-7-16 09:23:58 | 显示全部楼层
[quote:0e29929cda="ShiChao"]
我想知道mozzila的程序是否能在win32执行?[/quote]
估计不行吧,设备相关,况且win32好像没有ioctl()。
回复

使用道具 举报

 楼主| 发表于 2003-7-16 09:39:32 | 显示全部楼层
Only for Linux
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-15 11:16 , Processed in 0.071409 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表