C/C++ 获得公网ip地址和内网ip
来源:互联网 发布:mallat小波分解算法 编辑:程序博客网 时间:2024/04/30 03:11
获得公网ip:bool getPublicIp(string& ip){ int sock; char **pptr = NULL; struct sockaddr_in destAddr; struct hostent *ptr = NULL; char destIP[128]; sock = socket(AF_INET,SOCK_STREAM,0); if( -1 == sock ){ perror("creat socket failed"); return false; } bzero((void *)&destAddr,sizeof(destAddr)); destAddr.sin_family = AF_INET; destAddr.sin_port = htons(80); ptr = gethostbyname("www.ip138.com"); if(NULL == ptr){ perror("gethostbyname error"); return false; } for(pptr=ptr->h_addr_list ; NULL != *pptr ; ++pptr){ inet_ntop(ptr->h_addrtype,*pptr,destIP,sizeof(destIP)); printf("addr:%s\n",destIP); ip = destIP; return true; } return true;}
获得内网ip:int getlocalip(char* outip){#ifndef WIN32int i=0;int sockfd;struct ifconf ifconf;char buf[512];struct ifreq *ifreq;char* ip;//初始化ifconfifconf.ifc_len = 512;ifconf.ifc_buf = buf;strcpy(outip,"127.0.0.1");if((sockfd = socket(AF_INET, SOCK_DGRAM, 0))<0){return -1;}ioctl(sockfd, SIOCGIFCONF, &ifconf); //获取所有接口信息close(sockfd);//接下来一个一个的获取IP地址ifreq = (struct ifreq*)buf;for(i=(ifconf.ifc_len/sizeof(struct ifreq)); i>0; i--){ip = inet_ntoa(((struct sockaddr_in*)&(ifreq->ifr_addr))->sin_addr);if(strcmp(ip,"127.0.0.1")==0) //排除127.0.0.1,继续下一个{ifreq++;continue;}}strcpy(outip,ip);return 0;#elsereturn 0;#endif}
1 3
- C/C++ 获得公网ip地址和内网ip
- 公网IP和内网IP
- 公网ip和内网ip
- 公网IP/内网IP:
- 公网ip、内网ip
- 获得局域网内IP地址和主机名
- 内网ip和公网ip的转换
- 内网IP和公网IP的区别
- 内网IP和公网IP的区别
- 内网ip和公网ip的转换
- 内网IP和公网IP的区别
- 内网IP和公网IP的区别
- 内网IP和公网IP的区别
- 内网IP和公网IP的区别
- 如何通过IP地址分辨公网、私网、内网、外网
- 公网/内网IP分配及NAT地址转换协议
- 如何通过IP地址分辨公网、私网、内网、外网
- 公网/内网IP分配及NAT地址转换协议
- 在TCanvas上画图
- 使用Spring Data来操作MongoDB
- 作为一项技艺的管理——Leo鉴书81
- 建议的程序员学习LDA算法的步骤
- TFS服务端IP更改
- C/C++ 获得公网ip地址和内网ip
- Google 2013年最具影响力的技术论文
- 同步AFNetworking请求
- 静态路由,NAT和代理服务器/ALG
- 13Saving Files(保存文件到手机内存和外存储设备上)
- 2013.9月,百度电话面试经验
- OJ题——犯“m”的灯
- 无向网图的最小生成树算法--克鲁斯卡尔算法
- How to get to the point quickly?