首页
社区
课程
招聘
[求助]C++怎么获取外网IP呀。
发表于: 2013-6-23 12:04 12032

[求助]C++怎么获取外网IP呀。

2013-6-23 12:04
12032
收藏
免费 0
支持
分享
最新回复 (8)
雪    币: 1042
活跃值: (500)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
gethostname gethostbyname 好像可以。
2013-6-23 12:30
0
雪    币: 243
活跃值: (209)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
找个网站或者自己放个,例如http://www.ip138.com/
然后geturl,parse
2013-6-23 12:34
0
雪    币: 6003
活跃值: (3490)
能力值: ( LV6,RANK:96 )
在线值:
发帖
回帖
粉丝
4
http://ifconfig.me/ 用curl ifconfig.me/ip
2013-6-23 13:22
1
雪    币: 778
活跃值: (208)
能力值: ( LV9,RANK:260 )
在线值:
发帖
回帖
粉丝
5
http://iframe.ip138.com/ic.asp 简单些
2013-6-23 16:58
0
雪    币: 110
活跃值: (527)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
6
求具体源码,没有搞过。你说这个我也不明白什么意思。
2013-6-28 10:30
0
雪    币: 110
活跃值: (527)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
7
怎么弄呀,大牛,没搞过呀。
2013-6-28 10:31
0
雪    币: 796
活跃值: (370)
能力值: ( LV9,RANK:380 )
在线值:
发帖
回帖
粉丝
8
楼主好懒

void ReadInternetIP(char *OutBuf)
{
        SOCKET ClientSocket;
        char* lpbuffer;
        BOOL bResult = FALSE;
        DWORD nbytes;
        char Buf[1024] = {0};
        char IPBuf[1024] = {0};
        char IPNextBuf[1024] = {0};
        char InternetIP[100] = {0};
        char *p = NULL;

        __try{
//                //使用wininetAPI,win7 64位下取到IP之后,还继续保持连接,**,这点不好,直接用socket操作算了
//                 hSession = InternetOpenA("HttpOpen", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
//                 if (hSession != NULL)
//                 {
//                         hRequest = InternetOpenUrlA(hSession, "http://iframe.ip138.com/ic.asp", NULL, 0, INTERNET_FLAG_RELOAD, 0);
//                         if (hRequest != NULL)
//                         {
//                                 if (InternetReadFile(hRequest, Buf,MAX_PATH, &dwBytesRead))
//                                 {
//                                         bResult = TRUE;
//                                 }
//                                 InternetCloseHandle(hRequest);
//                         }
//                         InternetCloseHandle(hSession);
//                 }
                char request[1024] = "GET /ic.asp HTTP/1.1\r\nHost:iframe.ip138.com\r\nConnection: close\r\n\r\n"; //Connection: close 要求http服务器,接收完数据之后,客户端断开服务器也要断开
                HOSTENT *host_entry = gethostbyname("iframe.ip138.com");
                if (host_entry)
                {
                        lpbuffer = inet_ntoa(*((struct in_addr *)host_entry->h_addr)) ;
                        sockaddr_in servAddr;
                        servAddr.sin_family = AF_INET;
                        servAddr.sin_port = htons(80);
                        servAddr.sin_addr.S_un.S_addr=inet_addr(lpbuffer);
                        ClientSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
                        if (ClientSocket != INVALID_SOCKET )
                        {
                                if(connect(ClientSocket,(struct sockaddr*)&servAddr, sizeof(servAddr))!= -1)
                                {
                                        if(send(ClientSocket, request, (int)strlen(request), 0) != -1)
                                        {
                                                if((nbytes=recv(ClientSocket,Buf,1024,0)) != -1)
                                                {
                                                        bResult = TRUE;
                                                }
                                        }
                                }
                                //断开连接
                                closesocket(ClientSocket);
                        }
                }
                if (strlen(Buf) && bResult)
                {
                        p = strstr(Buf,"[");
                        if (p)
                        {
                                sprintf(IPBuf,"%s",p+1);

                                p = strstr(Buf,"]");
                                if (p)
                                {
                                        sprintf(IPNextBuf,"%s",p);

                                        if (strlen(IPBuf) > strlen(IPNextBuf))
                                        {
                                                memcpy(OutBuf,IPBuf,strlen(IPBuf) - strlen(IPNextBuf));
                                        }
                                }
                        }
                }
        }__except(1){

        }
}
2013-6-28 10:43
0
雪    币: 110
活跃值: (527)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
9
[QUOTE=Winker;1193102] 楼主好懒

void ReadInternetIP(char *OutBuf)
{
        SOCKET ClientSocket;
        char* lpbuffer;
        BOOL bResult = FALSE;
        DWORD nbytes;
        char Buf[1024...[/QUOTE]

真心没弄过。亲。你懂的。
2013-6-28 12:44
0
游客
登录 | 注册 方可回帖
返回
//