最近写个程序需要获取本机用于连接的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命令运行结束再往下运行。

  代码如下:

      std::string path =  "D:\\localAddress.txt";
//创建用于保存本机IP地址的localAddress.txt
std::ofstream fout(path);
if (fout) // 如果创建成功
{
fout << "" << std::endl;
fout.close(); // 执行完操作后关闭文件句柄 std::string ptr;
std::string output;
ptr="cmd /c netstat | findstr \"192.168.6.66:3333 > ";
ptr += path; STARTUPINFO si;
PROCESS_INFORMATION pi; ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
//隐藏掉可能出现的cmd命令窗口
si.dwFlags = STARTF_USESHOWWINDOW;
si.wShowWindow = SW_HIDE;
ZeroMemory(&pi, sizeof(pi)); // Start the child process.
if (CreateProcess(NULL, // No module name (use command line)
(LPSTR)(LPCTSTR)ptr.c_str(), // Command line
NULL, // Process handle not inheritable
NULL, // Thread handle not inheritable
FALSE, // Set handle inheritance to FALSE
, // No creation flags
NULL, // Use parent's environment block
NULL, // Use parent's starting directory
&si, // Pointer to STARTUPINFO structure
&pi) // Pointer to PROCESS_INFORMATION structure
)
{ // Wait until child process exits.
WaitForSingleObject(pi.hProcess, INFINITE); std::fstream ffileTemp(path); //作为读取文件打开
if (ffileTemp)
{
char buffer[];
while (!ffileTemp.eof())
{
ffileTemp.getline(buffer, , '\n');
std::string temp = buffer;
if (temp.find("ESTABLISHED") != std::string::npos)
{
output += temp;
break;
}
}
ffileTemp.close();
} if (output.length() > )
{
output.erase(, output.find_first_not_of(" "));
std::string localip, temp;
temp = output.substr(output.find_first_of(" "));
temp.erase(, temp.find_first_not_of(" "));
temp = temp.substr(, temp.find_first_of(" ")); localip = temp.substr(, temp.find_first_of(":")); //获得ip地址 }
}
}

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. bzoj 4596

    4596: [Shoi2016]黑暗前的幻想乡 Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 257  Solved: 152[Submit][Sta ...

  2. 【179】IDL 读写 NetCDF 文件

    NetCDF(network Common Data Form)由位于科罗拉多州波尔市的 Unidata 程序中心开发,主要应用于大气科学的研究.NetCDF 的数据模式具有简单性和灵活性的特点.Ne ...

  3. java面试(上)

    http://blog.csdn.net/jackfrued/article/details/44921941 1.面向对象的特征有哪些方面? 答:面向对象的特征主要有以下几个方面: - 抽象:抽象是 ...

  4. Lodash 方法库 原生实现 待完结。。。

    'use strict' let _ = { // 将数组(array)拆分成多个 size 长度的区块,并将这些区块组成一个新数组. 如果array 无法被分割成全部等长的区块,那么最后剩余的元素将 ...

  5. SSH的安装及使用

    ssh(secure shell--加密远程登录管理服务器) ,是一种安全的传输协议,主要用于给远程登录会话的数据进行加密,保证数据传输的安全.Ubuntu客户端可以通过SSH访问远程服务器.SSH的 ...

  6. C语言中Static和Const关键字的的作用 -- 转

    static作用:“改变生命周期” 或者 “改变作用域” 程序的局部变量存在于(堆栈)中,全局变量存在于(静态区 )中,动态申请数据存在于( 堆)中. 1.作用于变量: 用static声明局部变量-- ...

  7. 使用 Suricata 进行入侵监控(一个简单小例子访问百度)

    前期博客 基于CentOS6.5下Suricata(一款高性能的网络IDS.IPS和网络安全监控引擎)的搭建(图文详解)(博主推荐) 1.自己编写一条规则,规则书写参考snort规则(suricata ...

  8. 转】RDD与DataFrame的转换

    原博文出自于: http://www.cnblogs.com/namhwik/p/5967910.html RDD与DataFrame转换1. 通过反射的方式来推断RDD元素中的元数据.因为RDD本身 ...

  9. Html标签杂记

    <html> <head> <title> </title> </head> <body> </body> < ...

  10. HashMap和List遍历方法总结及如何遍历删除元素

    https://blog.csdn.net/demohui/article/details/77748809