• 基础知识
  1. 电脑在局域网内,通过网关/路由器连接到Internet则ip分为内网ip、外网ip。通过ipconfig得到的为局域网ip。
  2. 电脑直接拨号连接等,则本机通过ipconfig得到的就是外网ip。
  • 代码
//Get IP
int GetLocalIP(std::string &local_ip);
int GetInternetIP(std::string &Inernet_ip);
int GetLocalIP( std::string &local_ip )
{
WSADATA wsaData = {};
if (WSAStartup(MAKEWORD(, ), &wsaData) != )
return kErrorWSAStartup;
char szHostName[MAX_PATH] = {};
int nRetCode;
nRetCode = gethostname(szHostName, sizeof(szHostName));
PHOSTENT hostinfo;
if (nRetCode != )
return WSAGetLastError();
hostinfo = gethostbyname(szHostName);
local_ip = inet_ntoa(*(struct in_addr*)*hostinfo->h_addr_list);
WSACleanup();
return ;
} int GetInternetIP( std::string &Inernet_ip )
{
Inernet_ip.resize();
TCHAR szTempPath[_MAX_PATH] = {}, szTempFile[MAX_PATH] = {};
std::string buffer;
GetTempPath(MAX_PATH, szTempPath);
UINT nResult = GetTempFileName(szTempPath, _T("~ex"), , szTempFile);
int ret=URLDownloadToFile(NULL,_T("http://www.ip138.com/ip2city.asp"),szTempFile,BINDF_GETNEWESTVERSION,NULL);
if (ret == S_FALSE)
return ;
FILE *fp;
if (_wfopen_s(&fp,szTempFile,_T("rb"))!=){
return ;
}
fseek(fp,,SEEK_END);//得到文件大小
int ilength=ftell(fp);
fseek(fp,,SEEK_SET);
if(ilength>)
{
buffer.resize(ilength);
fread(&buffer[],sizeof(TCHAR),ilength,fp);
fclose(fp);
DeleteFile(_T("ip.ini")); char* str_ip = strstr(&buffer[], "[");
if (str_ip !=NULL)
{
sscanf_s(str_ip+, "%[^]]", &Inernet_ip[], );
}
return ;
}
else
{
fclose(fp);
return ;
}
}
  • 解释
获取内网ip:
1、通过系统函数gethostname得到主机名。
2、通过主机名得到内网ip。
获取外网ip:
1、通过ip源,下载其脚本文件并保存。
2、保存文件中有外网ip,解析出来。
 

获取外网ip所需要的IP源:(几乎所有可以显示IP地址的网页都可以成为IP源)

http://www.ipchicken.com/

http://whatismyipaddress.com/

http://www.ip138.com/ip2city.asp

转载地址:https://blog.csdn.net/xiaolengzile/article/details/41868989

获取本机内网、外网ip(C++)<转>的更多相关文章

  1. C#获取本机内网外网IP

    using System.Net; # region 获取内.外网Ip /// <summary> /// 获取本地ip地址,优先取内网ip /// </summary> pu ...

  2. Android根据内网外网连接情况配置服务器访问IP

    新项目的app,可通过内网和外网的服务器ip进行请求访问,但是客户提供了专业终端,终端在wifi情况下走外网内网都可以,但关闭wifi则只能走4G专网,也就是只能走内网. 可前往我的小站查看:Andr ...

  3. 虚机中访问外网;NAT中的POSTROUTING是怎么搞的?

    看下docker中是怎么配置的网络 在虚机中访问外网:设定了qemu,在主机上添加路由:sudo iptables -t nat -I POSTROUTING -s 192.168.1.110 -j ...

  4. [转] 如何设置双网卡同时连接内网外网_bpao_新浪博客

    已剪辑自: http://blog.sina.com.cn/s/blog_5d3e229c0100skwe.html 如何设置双网卡同时连接内网外网 . 通过无线网络连接外网,确保连接成功后开始第二步 ...

  5. win10内网外网智能访问

    当电脑同时连接有线和WiFi时(有线连接为内网,WiFi为外网),会出现内网和外网内容无法同时访问的情况. 本方法实现内网和外网的同时访问. 第一步: 输入指令 “route print ” 查看路由 ...

  6. Ubuntu16.04双网卡配置,内网外网同时访问

    Ubuntu16.04双网卡配置,内网外网同时访问 配置:vim/etc/network/interface auto lo iface lo inet loopback auto eno1 ifac ...

  7. nginx反向代理下thinkphp、php获取不到正确的外网ip

    在记录用户发送短信需要获取用户ip时,tp一直获取的是内网ip:10.10.10.10 tp框架获取ip方法:get_client_ip /** * 获取客户端IP地址 * @param intege ...

  8. Java 获取CPU、内存、外网IP等硬件信息

    import java.io.BufferedReader; import java.io.File; import java.io.IOException; import java.io.Input ...

  9. 配置windows路由表,使电脑同时连接内网外网方法

    1.环境一(系统:windows xp,内网.外网不是同一类地址,内网地址固定): 外网:通过笔记本的无线网卡连接: 内网:通过笔记本的本地连接: 第一步,连接网线,配置本地连接地址,注意IP地址不要 ...

随机推荐

  1. PAT 乙级 1051 复数乘法 (15) C++版

    1051. 复数乘法 (15) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 复数可以写成(A + Bi)的常规 ...

  2. 廖雪峰Java5集合-3Map-Properties的使用

    Properties用于读取配置 properties文件只能使用ASCII码 #表示注释 可以从文件系统读取.properties文件 Properties props = new Properti ...

  3. div+css命名大全

    头:header  内容:content/container  尾:footer  导航:nav  侧栏:sidebar 栏目:column 页面外围控制整体布局宽度:wrapper  左右中:lef ...

  4. Perl 文件处理范例

    觉得这个范例不错就保存了,原文地址在这里:http://www.cnblogs.com/zhangzhi/archive/2010/10/19/1855302.html Perl 文件处理范例 . 任 ...

  5. docker私库harbor的搭建

    1.文件下载 # wget https://storage.googleapis.com/harbor-releases/harbor-online-installer-v1.5.1.tgz 安装官网 ...

  6. Spring事务管理的demo

    事务是逻辑上的一组操作,这组操作要么全部成功,要么全部失败,最为典型的就是银行转账的案例: A要向B转账,现在A,B各自账户中有1000元,A要给B转200元,那么这个转账就必须保证是一个事务,防止中 ...

  7. Android给TextView设置多个字体颜色

    效果如下:

  8. Linux入门:常用命令:查看硬盘、分区、CPU、内存信息

    查看硬盘信息 $df -lh    #查看所有硬盘的使用状 $du -sh /etc   #查看etc目录大小 #获得文件大小很方便,主要是目录 外部系统挂载 $mount               ...

  9. 电商系统架构总结4(webapi 版本控制)

    为了 顺利迭代升级,web api 在维护过程是不断升级的,但用户是不能强迫他们每次都跟随你去升级,这样会让用户不胜其烦.为了保证不同版本的客户端能同时兼容,在web api接口上加入版本控制就很有必 ...

  10. virsh详解

    来个表情包表达我此时的心情 man virsh virsh [options]... [<command_string>] virsh [options]... <command&g ...