首页
社区
课程
招聘
[求助]怎么获得主机的真实IP?
发表于: 2006-6-13 11:05 7495

[求助]怎么获得主机的真实IP?

2006-6-13 11:05
7495

如题,就是像218.5.6.68这样的IP,而不是192.168.0.XX这样的IP。我用gethostbyname()只能得到192.168.0.XX这样的IP。
请高手指教!


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 7
支持
分享
最新回复 (12)
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
此函数能够得到一个类似:
"document.write('<a href="http://union.itlearner.com/ip/ipinfo.asp">
您的IP是:xxx.xxx.xxx.xxx 所在区域:xx市</a>');"
的字符串给你,接下来该怎么办就看你自己的了.

void GetRealIp()
{
        CInternetSession session;

        CHttpFile* pFile = NULL;

        CString strHttp = _T("http://union.itlearner.com/ip/getip.asp");

        try
        {
                pFile = (CHttpFile*)session.OpenURL(strHttp);
        }
        catch(CInternetException* e)
        {
                pFile = NULL;

                TCHAR error[255];
                e->GetErrorMessage(error, 255);
                TRACE(_T("error: %s\n"), error);
               
                e->Delete();

                return;
        }

        if(pFile != NULL)
        {
                CString strTemp = _T("");
                CString strIPAddress = _T("");
               
                while(pFile->ReadString(strTemp))    //读入该字符串
                {
                        strIPAddress += strTemp;
                }

                TRACE(_T("%s\n"), strIPAddress);

                pFile->Close();

                delete pFile;
                pFile = NULL;
        }
}
2006-6-13 15:44
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
另外听说还可以通过STUN协议获取公网IP地址,请哪位朋友讲解一下???
2006-6-13 15:49
0
雪    币: 235
活跃值: (100)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
gethostbyname返回的是一个结构体指针,里面包含了计算机使用的所有ip,开始多数是显示内网IP,只要移动指针,就可以看到外网IP了~~~
2006-6-13 16:22
0
雪    币: 208
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
最初由 lemony 发布
gethostbyname返回的是一个结构体指针,里面包含了计算机使用的所有ip,开始多数是显示内网IP,只要移动指针,就可以看到外网IP了~~~


这个我也想知道,有没有具体的例子?有就太好了
2006-6-13 16:52
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
最初由 lemony 发布
gethostbyname返回的是一个结构体指针,里面包含了计算机使用的所有ip,开始多数是显示内网IP,只要移动指针,就可以看到外网IP了~~~


for (int i=0; phostLocal->h_addr_list[i]+phostLocal->h_length!=phostLocal->h_name; i++)
{
                arrstrIP.Add(inet_ntoa( * (IN_ADDR*) phostLocal->h_addr_list[i] ));
}

是指这样移动指针吗???
这样取出来的IP地址是一台计算机安装了多块网卡或者虚拟网卡的所有IP地址,
都是子网地址,无法获取公网地址 不知道我的写法对不对?
2006-6-13 17:24
0
雪    币: 222
活跃值: (10)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
7
最初由 masmprogra 发布
for (int i=0; phostLocal->h_addr_list+phostLocal->h_length!=phostLocal->h_name; i++)
{
arrstrIP.Add(inet_ntoa( * (IN_ADDR*) phostLocal->h_addr_list ));
}

........


对经过路由的就没有用,取IP还是得跟路由通信的
2006-6-13 18:19
0
雪    币: 241
活跃值: (160)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
我在网上找了一个NetServerGetInfo(),这个函数好像可以,不过不知道怎么用法?
2006-6-14 01:34
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
?於?咀而言,只有router才知道?外的真?IP,
router?把送出去和?咄?的packet都做手倪
所以,?就server本身而言,那?192.168.xxx.xxx
就是它的"真?"IP,router做了什?,server本身是不?知道的

想知道自己的"真?"的IP的?,最??的方法是透咿?外?劳,因??你送出packet到外面去?,router必??packet?手倪,把真?的?外IP斤?上,所以?方可以知道你的真?的IP

可以?? http://checkip.dyndns.org/
2006-6-14 11:00
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
最初由 xiluoyou 发布
我在网上找了一个NetServerGetInfo(),这个函数好像可以,不过不知道怎么用法?


楼主,这个函数好像不行,你可以查看MSDN的帮助,我在单位用的也是局域网IP,用这个函数只能看见本机的所有信息,其他机子的信息全部无法访问,不知是无权限访问还是怎么?

没有其他好的办法只有用我上面提供给你的函数了,那个函数需要添加头文件<afxinet.h>,我一直在用那个函数,没出过什么问题,如果你找到其他好的办法可以给我发个短消息,大家一起学习进步.
2006-6-14 11:48
0
雪    币: 241
活跃值: (160)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
最初由 memxie 发布
?於?咀而言,只有router才知道?外的真?IP,
router?把送出去和?咄?的packet都做手倪
所以,?就server本身而言,那?192.168.xxx.xxx
就是它的"真?"IP,router做了什?,server本身是不?知道的

........

网址好像连不上?
2006-6-14 20:26
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
和上面提到的http://union.itlearner.com/ip/getip.asp是一?的意思
就是?方的server?把你的IP回?斤你
2006-6-14 20:54
0
雪    币: 241
活跃值: (160)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
最初由 memxie 发布
和上面提到的http://union.itlearner.com/ip/getip.asp是一?的意思
就是?方的server?把你的IP回?斤你

呵,看来2楼的方法是唯一的啦?不过我不怎么喜欢用MFC类(说白了就是不会用!)
2006-6-15 23:37
0
游客
登录 | 注册 方可回帖
返回
//