怎样获取外网的IP地址?

jialuo 2005-04-21 11:04:29
注意,不是本地IP地址,是Internet上的地址 最好有完整代码,解决100分相送,分不够再加.在线等.....
...全文
554 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
vsscj 2010-06-13
  • 打赏
  • 举报
回复
#include <stdio.h>
#include<urlmon.h>
#pragma comment (lib,"Urlmon.lib")
void main()
{
char buf[MAX_PATH] = {0};
char chTempIp[128];
char chIP[64];
URLDownloadToFile(0,"http://www.ip138.com/ip2city.asp","c:\\1.ini",0,NULL);

FILE *fp=fopen( "c:\\1.ini", "r" );

if ( fp != NULL ) {

fseek(fp, 0, SEEK_SET);
fread(buf,1,256,fp);
fclose(fp);
char* iIndex = strstr(buf,"[");

if (iIndex) {
sprintf( chTempIp,"%s",iIndex);
int nBuflen = strlen(chTempIp);

for(int i =0; i<nBuflen; i++){
chIP[i] = chTempIp[i+1];

if(chTempIp[i] == ']') {
chIP[i-1] = '\0';
DeleteFile("c:\\1.ini");
continue;
}

}
}

}
MessageBox(NULL, chIP,chIP,0);


}
syd1207 2005-04-26
  • 打赏
  • 举报
回复
利用腾讯的服务器:让你的朋友装一个显IP的QQ,然后你上线,让他看你的IP是多少,再告诉你!

否则不利用服务器的的话,不知道怎么直接查外网IP.
SharpKing515 2005-04-26
  • 打赏
  • 举报
回复
那个IP好像你你本地取不到,因为那个IP只保留在接入服务器上!!!
jialuo 2005-04-25
  • 打赏
  • 举报
回复
对,我取的就是临时IP
oyljerry 2005-04-25
  • 打赏
  • 举报
回复
^_^,要么直接访问可以获得IP的网站,然后获得IP
SharpKing515 2005-04-25
  • 打赏
  • 举报
回复
你是想取NAS给你分配的那个临时IP么??即:Client IP???
bing_huo 2005-04-25
  • 打赏
  • 举报
回复
不明白你的意思了 你想取谁的ip????还不是你自己的???取本地的又有什么不对????
jialuo 2005-04-25
  • 打赏
  • 举报
回复
别说废话好不?
okkk 2005-04-22
  • 打赏
  • 举报
回复
在cmd下,使用ipconfig -all
可以查出你所有的地址值,不过必须是路由可达。
VC中估计有类似的API.
jialuo 2005-04-21
  • 打赏
  • 举报
回复
还有人没明白我的意思
我要的是ADSL上网临时分配的IP地址
而gethostbyname是指本地的
zengwujun 2005-04-21
  • 打赏
  • 举报
回复
对了,本地dns列表应该有网关的地址,这个地址就是你在外网中的ip了
zengwujun 2005-04-21
  • 打赏
  • 举报
回复
这个好象只中转服务器知道,对你来说是透明的
富莱工作室 2005-04-21
  • 打赏
  • 举报
回复
gethostbyname()
富莱工作室 2005-04-21
  • 打赏
  • 举报
回复
CSockAddr CBlockingSocket::GetHostByName(const char *pchName, const USHORT ushPort)
{
hostent* pHostEnt = gethostbyname(pchName);
if(pHostEnt == NULL)
{
throw new CBlockingSocketException("GetHostByname");
}

ULONG *pulAddr = (ULONG*) pHostEnt->h_addr_list[0];
SOCKADDR_IN sockTemp;
sockTemp.sin_family = AF_INET;
sockTemp.sin_port = htons(ushPort);
sockTemp.sin_addr.s_addr = *pulAddr;
return sockTemp;
}
jialuo 2005-04-21
  • 打赏
  • 举报
回复
不好意思
可能是我没表达清楚
我要得到的是自己的上网所分配的IP地址,希望不要通过服务器转告的方式
liao2001 2005-04-21
  • 打赏
  • 举报
回复
1.已知域名,利用DNS来获取对方IP
2.未知域名,由外部IP主动发包给内部IP,需要考虑NAT
3.利用一个外部服务器转告
jialuo 2005-04-21
  • 打赏
  • 举报
回复
up
jialuo 2005-04-21
  • 打赏
  • 举报
回复
又是一个取本地IP的朋友
i浩n诺 2005-04-21
  • 打赏
  • 举报
回复
char* GetLocalIp(int n)
{
if (0>n || n>7)
return NULL;

char szLocname[MAX_HOSTNAME_LEN];
struct in_addr in_addrIP;
int iRc = gethostname(szLocname, sizeof(szLocname));
if (iRc == SOCKET_ERROR)
return NULL;

LPHOSTENT lphp = gethostbyname(szLocname);
if (lphp->h_addr_list[n]==NULL)
return NULL;

in_addrIP = *(struct in_addr far *) (lphp->h_addr_list[n]);

return inet_ntoa(in_addrIP);
}

n可以从0到7,那个是ADSL上网临时分配的IP地址自个分析
远游客-蜡台 2005-04-21
  • 打赏
  • 举报
回复
ipconfig
加载更多回复(1)

64,662

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧