网上找了好久,基本上说用gethostbyname函数,可惜试了不行,只能查到内网IP.还有就是说用查IP网站的方式来获取,感觉那样的话某天那个网站over了自己的程序也一起over了,请问大家有没有不通过IP查询网站直接使用windows的API来获取主机外网IP的方法?
解决方案 »
- (顺序查找索引表)平均查找长度=(S^2+2S+n)/(2S)//(S^2+2S+n)代表什么意思
- 帮忙看看这段代码错误在哪?
- 在vc中对话框前关闭发生哪些消息
- 一时手误删掉了debug文件夹,现在连新建工程都出错
- 类的函数中访问Directx的API回调函数出错??
- 请问高人:我要做个小球做平面运动的动画,可以通过输入控制他的方向,运动速度等.该如何实现呢?
- recordset.Delete ,出问题。。。。。。。。。(请教)
- VC中"_USRDLL" "_WINDLL"这两个宏起什么作用?
- GetFileTime()函数如何正确用于NTFS格式的硬盘?
- 十万火急的小问题!!
- 关于oledb与ado。
- 网络编程中,在数据链路层抓数据在显示出来这么慢
<head>
<meta http-equiv="content-type" content="text/html; charset=gb2312">
<title> 您的IP地址 </title>
</head>
<body style="margin:0px"><center>您的IP地址是:[XXX.100.XXX.XXX] </center></body></html>
也就是必须有以下过程
1.连上公网
2.像公网服务器发送数据
3.公网服务器必须要给你返回你的IP地址只有以上3步同时都成立才行。
至于你用什么方法就看你自己了,方法多的是。
*取得本机外网IP*
*返回值为IP字串
*/
CString General::GetIp()
{
CString ipStr="";
char szTempFile [MAX_PATH];
char szTempPath [MAX_PATH];
GetTempPath(MAX_PATH, szTempPath);
UINT nResult=GetTempFileName (szTempPath, _T ("ip"),0,szTempFile);
int ret=URLDownloadToFile(NULL,"http://www.ip138.com/ip2city.asp",szTempFile,0,NULL);
if (ret==S_OK) //如果下载成功
{
FILE *f;
f=fopen(szTempFile,"rb");
if(f)
{
fseek(f,0,SEEK_END);//得到文件大小
int ilength=ftell(f);
fseek(f,0,SEEK_SET);
if(ilength>0)
{
char szMyIp[16] = {0};
char fBuffer[256] = {0};
fread(fBuffer, 256, 1, f);
int iBegin,iEnd;
for (int i = 0; i < ilength; i++)
{
//取得"["的位置
if (fBuffer[i] == 0x5b)
iBegin = i;
//取得"]"的位置
if (fBuffer[i] == 0x5d)
{
iEnd = i;
break;
}
}
memcpy(szMyIp, fBuffer + iBegin + 1, iEnd - iBegin - 1);
//AfxMessageBox(szMyIp);
ipStr=szMyIp;
}
}
}
现在我想知道的是有没有其它办法获取自己的外网ip地址,比如到到路由/网关上直接获取什么的?
struct hostent * pHost;
int i;
LPCSTR IPAddress;
if(gethostname(szHostName,128)==0)
{
pHost = gethostbyname(szHostName);
for( i = 0; pHost!= NULL && pHost->h_addr_list[i]!= NULL; i++ )
{
IPAddress=inet_ntoa (*(struct in_addr *)pHost->h_addr_list[i]);
}
}IPAddress就是公网ip了
http://www.ip138.com/
就看到了。