最近写个程序需要获取本机用于连接的IP地址,经过很多的尝试后,最终使用的方法如下:

  1. 使用cmd命令    netstat  | findstr “192.168.6.66:3333” > D:\\localAddress.txt

    其中“192.168.6.66:3333”是我的程序连接的服务器的ip地址,运行netstat命令后,找到其中包含了“192.168.6.66:3333”的那一行,并将结果输出到 localAddress.txt 中,localAddress.txt中的结果可能如下图所示

      

  2.读取 localAddress.txt 中的内容,并解析出本机用于连接的ip地址为 192.168.4.45

  • 我是使用CreateProcess函数运行cmd命令,可以避免出现cmd命令窗口,也能等待cmd命令运行结束再往下运行。

  代码如下:

  1.      std::string path = "D:\\localAddress.txt";
  2. //创建用于保存本机IP地址的localAddress.txt
  3. std::ofstream fout(path);
  4. if (fout) // 如果创建成功
  5. {
  6. fout << "" << std::endl;
  7. fout.close(); // 执行完操作后关闭文件句柄
  8.  
  9. std::string ptr;
  10. std::string output;
  11. ptr="cmd /c netstat | findstr \"192.168.6.66:3333 > ";
  12. ptr += path;
  13.  
  14. STARTUPINFO si;
  15. PROCESS_INFORMATION pi;
  16.  
  17. ZeroMemory(&si, sizeof(si));
  18. si.cb = sizeof(si);
  19. //隐藏掉可能出现的cmd命令窗口
  20. si.dwFlags = STARTF_USESHOWWINDOW;
  21. si.wShowWindow = SW_HIDE;
  22. ZeroMemory(&pi, sizeof(pi));
  23.  
  24. // Start the child process.
  25. if (CreateProcess(NULL, // No module name (use command line)
  26. (LPSTR)(LPCTSTR)ptr.c_str(), // Command line
  27. NULL, // Process handle not inheritable
  28. NULL, // Thread handle not inheritable
  29. FALSE, // Set handle inheritance to FALSE
  30. , // No creation flags
  31. NULL, // Use parent's environment block
  32. NULL, // Use parent's starting directory
  33. &si, // Pointer to STARTUPINFO structure
  34. &pi) // Pointer to PROCESS_INFORMATION structure
  35. )
  36. {
  37.  
  38. // Wait until child process exits.
  39. WaitForSingleObject(pi.hProcess, INFINITE);
  40.  
  41. std::fstream ffileTemp(path); //作为读取文件打开
  42. if (ffileTemp)
  43. {
  44. char buffer[];
  45. while (!ffileTemp.eof())
  46. {
  47. ffileTemp.getline(buffer, , '\n');
  48. std::string temp = buffer;
  49. if (temp.find("ESTABLISHED") != std::string::npos)
  50. {
  51. output += temp;
  52. break;
  53. }
  54. }
  55. ffileTemp.close();
  56. }
  57.  
  58. if (output.length() > )
  59. {
  60. output.erase(, output.find_first_not_of(" "));
  61. std::string localip, temp;
  62. temp = output.substr(output.find_first_of(" "));
  63. temp.erase(, temp.find_first_not_of(" "));
  64. temp = temp.substr(, temp.find_first_of(" "));
  65.  
  66. localip = temp.substr(, temp.find_first_of(":")); //获得ip地址
  67.  
  68. }
  69. }
  70. }

C++获取本机用于连接的IP地址的更多相关文章

  1. 【liunx】使用xshell连接虚拟机上的CentOS 7,使用xhell连接本地虚拟机上的Ubuntu, 获取本地虚拟机中CentOS 7的IP地址,获取本地虚拟机中Ubuntu 的IP地址,Ubuntu开启22端口

    注意,如果想用xshell去连接本地虚拟机中的linux系统,需要本地虚拟机中的系统是启动的才能连接!!!!! ============================================ ...

  2. JAVA获取客户端请求的当前网络ip地址(附:Nginx反向代理后获取客户端请求的真实IP)

    1. JAVA获取客户端请求的当前网络ip地址: /** * 获取客户端请求的当前网络ip * @param request * @return */ public static String get ...

  3. Java 获取当前项目所在服务器的 IP 地址

    java中获取当前服务器地址主要使用到InetAddress这个类 public static void main(String[] args) { try { //用 getLocalHost() ...

  4. javascript获取当前用户访问的宽带IP地址

    javascript获取当前用户访问的宽带IP地址 <script src="http://pv.sohu.com/cityjson?ie=utf-8"></sc ...

  5. 如何在SqlServer中获取前端连接的IP地址,计算机名等信息

    在一些需求中,可能我们需要知道连接到SqlServer的前端程序的一些系统信息,比如前端连接的计算机名称,IP地址,什么时候开始请求连接,什么时候结束连接等信息. 如果你对SqlServer的系统函数 ...

  6. C# 获取本机CPU序列号,MAC地址,硬盘ID,本机IP地址,计算机名,物理内存,PC类型

    首先引入服务 然后 调用 本文转载自http://blog.sina.com.cn/s/blog_7eeb43210101hf7f.html public class Computer { publi ...

  7. 获取本机正在使用的ipv4地址(访问互联网的IP)

    [转]原文地址:http://www.cnblogs.com/lijianda/p/6604651.html 1.一个电脑有多个网卡,有线的.无线的.还有vmare虚拟的两个网卡.2.就算只有一个网卡 ...

  8. C#获取本机的外网IP

    /// <summary> /// 功能:获取本地的外网IP地址 /// 作者:黄海 /// 时间:2016-07-22 /// </summary> /// <retu ...

  9. win7 64 位操作系统,进程System,PID为4,扫描连接局域网ip地址的139和445端口

    偶然发现电脑的System进程不间断扫描连接局域网内的其它IP对应的445和139端口,这是个问题. 上网搜索,立即关闭139端口的监听. 方法如下: 本地连接属性-TCP/IP属性-高级-WINS选 ...

随机推荐

  1. HO引擎近况20160710

    这次没有忘记,其实也忘了,只不过刚好碰上我换浏览器,正好想起来这事! 我把用了很长一段时间的chrome浏览器换成搜狗浏览器了,好多网站原先记住的用户名和密码都没有了我还需要重新输入! 今天再放一段美 ...

  2. SPOJ GSS3 线段树系列1

    SPOJ GSS系列真是有毒啊! 立志刷完,把线段树搞完! 来自lydrainbowcat线段树上的一道例题.(所以解法参考了lyd老师) 题意翻译 n 个数, q 次操作 操作0 x y把 Ax 修 ...

  3. 牛客小白月赛5-J-时间(time) (简单模拟)

    题目描述 Apojacsleam是一个喜欢特殊时刻的人. 他定义了一个时刻,若电子表显示ab:ba(24小时制),则该时刻为“回文时刻”(可以有前导零).例如00:00就是回文时刻. 给定一个时刻,求 ...

  4. linux下的c程序排版工具:indent 分类: linux 2014-06-14 20:05 720人阅读 评论(0) 收藏

    Linux下有一个方便的c语言程序排版工具,只要选择恰当的参数,可以轻易地使自己的程序具有统一的风格. 当然首先要安装indent,执行命令:apt-get install indent indent ...

  5. NDK(10)Android.mk各属性简介,Android.mk 常用模板--未完

    参考 : http://blog.csdn.net/hudashi/article/details/7059006 1. Android.mk简介 Android.mk文件是GNU Makefile的 ...

  6. 使用mysql实现mybatis的分页效果

    1.mybatis.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configur ...

  7. D. Arpa's weak amphitheater and Mehrdad's valuable Hoses 分组背包模板题

    http://codeforces.com/problemset/problem/742/D 并查集预处理出所有关系. 一开始的时候,我预处理所有关系后,然后选择全部的时候,另起了一个for,然后再判 ...

  8. 不重启IIS修改dotnet framework版本

    因为公司现在存在.net站点和asp站点共同运行的情况,所以需要对IIS进行一些修改,运行环境Win2003+IIS6 一.起因 原来的老站是asp开发的,用的是.net 2.0运行环境; 新站是.n ...

  9. Windows API函数大全一

    1. API之网络函数             WNetAddConnection 创建同一个网络资源的永久性连接             WNetAddConnection2 创建同一个网络资源的连 ...

  10. IntelliJ IDEA安装与破解

    1.软件下载 文中使用到的安装包下载 2.部署 安装一路下一步即可. 把下载的JetbrainsCrack-3.1-release-enc.jar放在安装目录的bin目录下 3.修改配置文件 在安装的 ...