首页 > 编程语言 >获取本机内网、外网ip(C++)

获取本机内网、外网ip(C++)

时间:2022-12-23 15:55:39浏览次数:37  
标签:fp return int ip 外网 本机 内网

  • 基础知识

 

  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 = {0};
    if (WSAStartup(MAKEWORD(2, 1), &wsaData) != 0)
        return kErrorWSAStartup;
    char szHostName[MAX_PATH] = {0};
    int nRetCode;
    nRetCode = gethostname(szHostName, sizeof(szHostName));
    PHOSTENT hostinfo;
    if (nRetCode != 0)
        return WSAGetLastError();        
    hostinfo = gethostbyname(szHostName);
    local_ip = inet_ntoa(*(struct in_addr*)*hostinfo->h_addr_list);
    WSACleanup();
    return 1;
}
 
int GetInternetIP( std::string &Inernet_ip )
{
    Inernet_ip.resize(32);
    TCHAR szTempPath[_MAX_PATH] = {0}, szTempFile[MAX_PATH] = {0};
    std::string buffer;
    GetTempPath(MAX_PATH, szTempPath);
    UINT nResult = GetTempFileName(szTempPath, _T("~ex"), 0, szTempFile);
    int ret=URLDownloadToFile(NULL,_T("http://www.ip138.com/ip2city.asp"),szTempFile,BINDF_GETNEWESTVERSION,NULL);
    if (ret == S_FALSE)
        return 0;
    FILE *fp;
    if (_wfopen_s(&fp,szTempFile,_T("rb"))!=0){
        return 0;
    }
    fseek(fp,0,SEEK_END);//得到文件大小
    int ilength=ftell(fp);
    fseek(fp,0,SEEK_SET);
    if(ilength>0)
    { 
        buffer.resize(ilength);
        fread(&buffer[0],sizeof(TCHAR),ilength,fp);
        fclose(fp);
        DeleteFile(_T("ip.ini"));
        
         char* str_ip = strstr(&buffer[0], "[");
         if (str_ip !=NULL)
         {
             sscanf_s(str_ip+1, "%[^]]", &Inernet_ip[0], 32);
         }     
        return 1;
    }
    else
    {
        fclose(fp);
        return 0;
    }
}
复制代码
  • 解释
获取内网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

标签:fp,return,int,ip,外网,本机,内网
From: https://www.cnblogs.com/kn-zheng/p/17000845.html

相关文章

  • 服务间访问的请求地址,走内网
    记录一次部署遇到过的问题问题描述:在一次现网服务上线中,新增了一个http请求地址的配置项,这个地址是当前服务请求另外一个服务的接口的一个配置请求,反正写的就是一个完全的......
  • 利用frp内网穿透使flask项目外网访问
     整体的功能图如下:frp下载地址:https://github.com/fatedier/frp/releases​github.com/fatedier/frp/releases本地服务器和云主机服务器均需要下载frp,放至任意位......
  • 红队隧道应用篇之Burpsuite设置上游代理访问内网(五)
    为何要设置上层代理BurpSuite设置上游代理的主要原因是为了拦截和修改来自浏览器的请求。当您在使用BurpSuite进行Web应用程序安全测试时,您可能希望模拟攻击者发送恶意......
  • 内网直播局域网直播校园直播系统方案,播控管理
    音视频融合应用系统​方案2022/11/03 目录第1章项目概况...11.1需求背景...11.2建设的必要性...11.3项目建设具备的基础条件...11.4建设内容...2第2章系统介......
  • 内网直播局域网直播系统的搭建
    搭建一套完全本地化部署的流媒体直播点播系统,引入本地演播室,录播,报告厅、会议,电视节目等实时信号,实现本地网络的手机、PC、机顶盒等智能终端进行观看。系统集成直播,点播,录制......
  • Yum应用场景 之 基于Centos-7 内网yum源服务器同步公网yum源
    内网yum源服务器同步公网yum源​​前言​​​​一、Yum应用场景​​​​二、案例部署​​前言RHEL、Centos系列系统,安装软件需要搭建yum仓库。但是当我们安装某些大多数应用......
  • 局域网直播内网直播系统的搭建
    搭建一套完全本地化部署的局域网流媒体直播点播系统,引入本地演播室,录播,报告厅、会议,电视节目等实时信号,实现本地网络的手机、PC、机顶盒等智能终端进行观看。系统集成直播,......
  • 小米R3G刷了padavan后时间不同步和定时关闭外网(wan)端口
    怎么刷openwrt或者padavan请见我2022年3月份的帖子https://www.cnblogs.com/jar/p/15954037.html最近遇到个新环境,遂拿出来用用有1个问题和1个需求时间不同步定时关......
  • 折腾系列:利用好光猫,实现IPv6外网访问内网网站
    一、场景最近刚好免费的宽带到期了,中国移动提供了优惠,可以以优惠价升级光纤1000M。很好,家里的网络体验感有所提升。刚好最近以白菜价买了华为云的服务器,也搭建了自己的个人......
  • mysql如何设置外网访问?
    限制授权网络访问,由系统数据库mysql表user决定,user表中的host字段内容决定;user表中的记录对应各用户的访问情况,host字段之可以为:%代表任意的主机都可以连接到mysql服务器,......