python - 调用返回列表的 C++ 函数

标签 python c++ network-interface

我有这个函数是C++:

#include <windows.h>
#include <iphlpapi.h>
#include <stdio.h>
#include <iostream>


#pragma comment(lib, "iphlpapi.lib")
void printInterfaces(){

    ULONG buflen = sizeof(IP_ADAPTER_INFO);
    IP_ADAPTER_INFO *pAdapterInfo = (IP_ADAPTER_INFO *)malloc(buflen);

    if (GetAdaptersInfo(pAdapterInfo, &buflen) == ERROR_BUFFER_OVERFLOW) {
        free(pAdapterInfo);
        pAdapterInfo = (IP_ADAPTER_INFO *)malloc(buflen);
    }

    if (GetAdaptersInfo(pAdapterInfo, &buflen) == NO_ERROR) {
        for (IP_ADAPTER_INFO *pAdapter = pAdapterInfo; pAdapter; pAdapter = pAdapter->Next) {

            if (pAdapter -> IpAddressList.IpAddress.String != "0.0.0.0"){
                std::cout << "IP: " <<
                    pAdapter->IpAddressList.IpAddress.String <<
                    " Description: " <<
                    pAdapter-> Description << std::endl;

            }


        }
    }

    if (pAdapterInfo) free(pAdapterInfo);

}

我正在用 python 编写一个嗅探器,我想获取 Windows 上的接口(interface)名称,所以这个 c++ 代码打印 IP 地址和描述,有没有办法从 python 调用这个函数并让它返回接口(interface)作为带有元组的列表?而且我在执行 != "0.0.0.0" 时遇到问题,它运行但不过滤 ip "0.0.0.0"的接口(interface)。正确的方法是什么?另外我对 C# 更熟悉,导入 C# 是否比 C++ 更容易?

最佳答案

通常是 python 包装器,如 swig:http://www.swig.org/papers/PyTutorial98/PyTutorial98.pdf或 Python.Boost 实际上包装了函数。

因此类型为 void 的 C++ 函数永远不会返回列表。 它打印到标准输出,因此您需要捕获它并解析它以生成一个 python 列表..

您可能希望在该 c++ 函数中返回一些实际上可以由 python 包装器解释为列表的内容。

尝试返回一个 std::vector 并阅读:https://wiki.python.org/moin/boost.python/StlContainers

关于python - 调用返回列表的 C++ 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30373242/

相关文章:

c++ - 使用指针访问类的私有(private)或 protected 数据

在 AIX 上使用 ioctl 的网络接口(interface)的硬件地址

java - 如何确定哪个网络。接口(interface)与java一起使用

从 HTML 中提取 Python 脚本

python - Pandas:根据列数据合并或连接数据框?

c++ - 显示功能状态的 QT 进度条

c++ - 如何列出 SQL 2005 Express 实例

network-programming - (mininet) 在一台主机上配置多个接口(interface)

python - 我如何改进欧拉问题 7 的代码

javascript - 这个 Javascript 请求和 Python 请求有什么区别?