获取本机内网、外网ip(C++)<转>
- 基础知识
- 电脑在局域网内,通过网关/路由器连接到Internet则ip分为内网ip、外网ip。通过ipconfig得到的为局域网ip。
- 电脑直接拨号连接等,则本机通过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所需要的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++)<转>的更多相关文章
- C#获取本机内网外网IP
using System.Net; # region 获取内.外网Ip /// <summary> /// 获取本地ip地址,优先取内网ip /// </summary> pu ...
- Android根据内网外网连接情况配置服务器访问IP
新项目的app,可通过内网和外网的服务器ip进行请求访问,但是客户提供了专业终端,终端在wifi情况下走外网内网都可以,但关闭wifi则只能走4G专网,也就是只能走内网. 可前往我的小站查看:Andr ...
- 虚机中访问外网;NAT中的POSTROUTING是怎么搞的?
看下docker中是怎么配置的网络 在虚机中访问外网:设定了qemu,在主机上添加路由:sudo iptables -t nat -I POSTROUTING -s 192.168.1.110 -j ...
- [转] 如何设置双网卡同时连接内网外网_bpao_新浪博客
已剪辑自: http://blog.sina.com.cn/s/blog_5d3e229c0100skwe.html 如何设置双网卡同时连接内网外网 . 通过无线网络连接外网,确保连接成功后开始第二步 ...
- win10内网外网智能访问
当电脑同时连接有线和WiFi时(有线连接为内网,WiFi为外网),会出现内网和外网内容无法同时访问的情况. 本方法实现内网和外网的同时访问. 第一步: 输入指令 “route print ” 查看路由 ...
- Ubuntu16.04双网卡配置,内网外网同时访问
Ubuntu16.04双网卡配置,内网外网同时访问 配置:vim/etc/network/interface auto lo iface lo inet loopback auto eno1 ifac ...
- nginx反向代理下thinkphp、php获取不到正确的外网ip
在记录用户发送短信需要获取用户ip时,tp一直获取的是内网ip:10.10.10.10 tp框架获取ip方法:get_client_ip /** * 获取客户端IP地址 * @param intege ...
- Java 获取CPU、内存、外网IP等硬件信息
import java.io.BufferedReader; import java.io.File; import java.io.IOException; import java.io.Input ...
- 配置windows路由表,使电脑同时连接内网外网方法
1.环境一(系统:windows xp,内网.外网不是同一类地址,内网地址固定): 外网:通过笔记本的无线网卡连接: 内网:通过笔记本的本地连接: 第一步,连接网线,配置本地连接地址,注意IP地址不要 ...
随机推荐
- [转][EasyUI]扩展 DateBox
/** * 给时间框控件扩展一个清除的按钮 */ $.fn.datebox.defaults.cleanText = '清空'; (function ($) { var buttons = $.ext ...
- java中源代码和lib库中有包名和类名都相同的类(转)
https://blog.csdn.net/itachiwwwg/article/details/9003261 当java的源代码中出现了和系统的lib库中的包名与类名完全一样的类时,系统应当怎么加 ...
- PopupWindows 在2.3.3下报java.lang.NullPointerException
03-05 01:20:56.040: E/AndroidRuntime(1396): java.lang.NullPointerException 03-05 01:20:56.040: E/And ...
- [UE4]Text Block文字字体偏移
这样看起来就像是真正的垂直居中对齐了.
- Android app widget中实现跑马灯效果(非widget部件也实用)
原文地址:http://blog.csdn.net/luoyebuguigen/article/details/37533631 关键是需要在TextView中嵌入requestForcus标签才会有 ...
- c#day04从控制台获取一个字符
class EnumStruct { //定义QQ的状态枚举 Qme QnLine OffLine Leave Busy //提示用户现在一个状态 然后接收 ,并将用户输入转换成枚举类 enum Qs ...
- tp3.2 支付宝手机网站支付
手机网站支付接口,支付宝官方文档:https://b.alipay.com/signing/productSet.htm?navKey=all 第一步: 1)登陆支付宝企业账号 进入支付宝官网 ,登陆 ...
- solr 请求参数过长报错,Solr配置maxBooleanClauses属性不生效原因分析
博客分类: 上次已经写过一篇关于solr中,查询条件过多的异常的文章,这次在总结扩展一下: 有时候我们的查询条件会非常多,由于solr的booleanquery默认设置的条件数为1024,所以超过 ...
- python r(不进行转义)的用法
第一种用法,直接针对字符串:r‘E:\ui\bbq.txt’ 第二种用法,针对变量名:r'' + 变量名
- 元组,列表的增删改查, for,range 循环
1. list(增删改查) 列表可以装大量的数据. 不限制数据类型. 表示方式:[] 方括号中的每一项用逗号隔开 列表和字符串一样.也有索引和切片 常用的功能: 1. 增: append() 2. 删 ...