如何获得当前电脑的有效IP? 同一台电脑可能出于不同的网络中,比如局域网,比如ADSL,如何才能获得当前有效的IP? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 gethostname,然后gethostbyname,hostent里面有个char FAR FAR** h_addr_list,这个就是地址列表 内网,gethostname,然后gethostbyname,hostent里面有个char FAR FAR** h_addr_list,这个就是地址列表外网IP助手函数。 我的意思就是要自己判断到底是在内网还是外网,比如你的网卡的地址可能是192.168.0.2,而通过ADSL上网,所以这个时候你是公网IP,而另一个时间你的电脑又处于内网,实际IP又是192.168.0.2,或者又可能你是DHCP内网上网,又是另外一个IP.gethostbyname只是得到一个列表比较难知道哪个是实际IP. 所以我问哪个是通往外网的IP?有效IP 按照你这个要求用gethostbyname就不是很方便了,干脆找个服务器连接一下,然后调用getsockname,获得的struct sockaddr里面就有你使用的地址了 "本地网卡的IP地址是绑定在网卡上的,而通过虚拟拨号上网时的IP是WAN连接".所以只要获得WAN连接的IP地址可能就是你说的"通往外网的IP"~~例如windows,他们在系统中处于不同的层,具体的我也忘了....HOHO,你可以看看windows网络结构 newbiestar() 如果是UDP调用GetSockName()好像不行啊,得到的IP是0.0.0.0,不知道什么原因 使用GetIpAddrTable得到ip地址列表#include "Iphlpapi.h"#pragma comment(lib,"Iphlpapi.lib") DWORD dwSize = 0; pIPAddrTable = new MIB_IPADDRTABLE; if(GetIpAddrTable(pIPAddrTable,&dwSize,0) == ERROR_INSUFFICIENT_BUFFER) { int x = sizeof(MIB_IPADDRTABLE); delete pIPAddrTable; pIPAddrTable = new MIB_IPADDRTABLE[dwSize / sizeof(MIB_IPADDRTABLE) + 1]; } DWORD dwRetVal; if((dwRetVal = GetIpAddrTable(pIPAddrTable,&dwSize,0)) == NO_ERROR) { DWORD ip; for(int i = 0; i < pIPAddrTable->dwNumEntries; i++) { //inet_ntoa(*(in_addr*)&(pIPAddrTable->table[i].dwAddr)); } } 如果你是ADSL拨号的可以用RAS函数得到该拨号的IP to xing_xing_xing(ζ未名ζ)你用的#include "Iphlpapi.h"#pragma comment(lib,"Iphlpapi.lib")不是vc自带的吗? to: Hylas(羽心) 不仅仅是adsl,比如用户是笔记本,不同的时候处于不同的网络环境to: cyblueboy83(爱情白痴—电脑迷)Iphlpapi.lib 在sdk里面,vs6没有自带,vs.net自带了 to cool_ice(冷冰)如果有拨号连接(如ADSL,PPOE,PPP),都可以得到该连接的IP另外的方法:你可以把你的网卡设置为192开头,那么地址列表中非192开头的IP可以认为外网IP MFC 中为什么 CDialog 中的Button 控件 CMainFram 不响应?? 现在用ado在数据库里查询的时候界面总是死掉一样, 如何从文件加载位图? 怎样把 CString 里面的内容转换成int型? SetDIBits是否支持旋转HBITMAP 这是怎么了? 极度郁闷!!!! 狂散1000分!!!(4)满20个结帖,后来的朋友请跟后面的帖子!斑竹手下留情,谢谢! 在VC怎样根据dll文件生成相应的lib库文件,用lib.exe吗,盼指教! 关于类型转换. CListCtrl中关于()的问题 请教高手,数据库连接的问题 服务器程序在运行几天后自动消失问题
外网
IP助手函数。
所以只要获得WAN连接的IP地址可能就是你说的"通往外网的IP"~~
例如windows,他们在系统中处于不同的层,
具体的我也忘了....HOHO,你可以看看windows网络结构
#include "Iphlpapi.h"
#pragma comment(lib,"Iphlpapi.lib")
DWORD dwSize = 0;
pIPAddrTable = new MIB_IPADDRTABLE; if(GetIpAddrTable(pIPAddrTable,&dwSize,0) == ERROR_INSUFFICIENT_BUFFER)
{
int x = sizeof(MIB_IPADDRTABLE);
delete pIPAddrTable;
pIPAddrTable = new MIB_IPADDRTABLE[dwSize / sizeof(MIB_IPADDRTABLE) + 1];
}
DWORD dwRetVal;
if((dwRetVal = GetIpAddrTable(pIPAddrTable,&dwSize,0)) == NO_ERROR)
{
DWORD ip;
for(int i = 0; i < pIPAddrTable->dwNumEntries; i++)
{
//inet_ntoa(*(in_addr*)&(pIPAddrTable->table[i].dwAddr));
}
}
可以用RAS函数得到该拨号的IP
你用的#include "Iphlpapi.h"
#pragma comment(lib,"Iphlpapi.lib")
不是vc自带的吗?
不仅仅是adsl,比如用户是笔记本,不同的时候处于不同的网络环境to: cyblueboy83(爱情白痴—电脑迷)
Iphlpapi.lib 在sdk里面,vs6没有自带,vs.net自带了
你可以把你的网卡设置为192开头,那么地址列表中非192开头的IP可以认为外网IP