#pragma once #include #ifdef NETTUNNELSDK_EXPORTS #define NETWORK_API __declspec(dllexport) #else #define NETWORK_API __declspec(dllimport) #endif /** * * @brief 本地计算机网卡信息 */ typedef struct { int InterfaceIndex; ///< 网卡索引 TCHAR NetCardUUID[260]; ///< 网卡名称, Windows标识为 UUID TCHAR NetCardName[MAX_NETCARD_NAME]; ///< 网卡名称 TCHAR NetCardDescription[132]; ///< 网卡描述 TCHAR NetCardIpaddr[MAX_IP_LEN]; ///< 网卡 IP 地址 TCHAR NetCardNetmask[MAX_IP_LEN]; ///< 网卡子网掩码 TCHAR NetCardGateway[MAX_IP_LEN]; ///< 网卡网关 TCHAR NetCardMacAddr[20]; ///< 网卡 MAC 地址 } NIC_CONTENT, *PNIC_CONTENT; #ifdef __cplusplus // If used by C++ code, extern "C" { // we need to export the C interface #endif /** * @brief 获取本机网卡信息 * @param[out] pInfo 网卡信息 @see NIC_CONTENT * @param[out] pItemCounts 计算机当前操作系统中网卡总数 最大值 32 * @return 函数执行结果 0: 成功, 小于0 失败 @see USER_ERRNO * - -ERR_INPUT_PARAMS 输入参数错误 * - -ERR_MALLOC_MEMORY 分配内存失败 * - ERR_SUCCESS 成功 */ TUNNEL_API int __cdecl GetAllNICInfo(PNIC_CONTENT *pInfo, int *pItemCounts); /** * @brief 获取当前 Internet 网卡名 * @param[out] pIfIndex 网卡索引 * @return 函数执行结果 0: 成功, 小于0 失败 @see USER_ERRNO * - -ERR_INPUT_PARAMS 输入参数错误 * - -ERR_ITEM_UNEXISTS 未找到具有 Internet 连接的网卡 * - ERR_SUCCESS 成功 */ TUNNEL_API int __cdecl GetInternetIfIndex(int *pIfIndex); /** * @brief 根据网卡 IP地址 获取网卡索引 * @param[in] pIpAddr 网卡IP地址 * @param[out] pIfIndex 网卡索引编号 * @return 函数执行结果 0: 成功, 小于0 失败 @see USER_ERRNO * - -ERR_INPUT_PARAMS 输入参数错误 * - -ERR_MALLOC_MEMORY 分配内存失败 * - -ERR_ITEM_UNEXISTS 找不到合适的网卡 * - -ERR_UN_SUPPORT 系统不支持该操作 * - ERR_SUCCESS 成功 */ TUNNEL_API int __cdecl GetInterfaceIfIndexByIpAddr(const TCHAR *pIpAddr, ULONG *pIfIndex); /** * @brief 根据网卡 GUDI 获取网卡名称 * @param[in] pGUID 网卡 GUID * @param[out] ifName 网卡名称 * @return 函数执行结果 0: 成功, 小于0 失败 @see USER_ERRNO * - -ERR_INPUT_PARAMS 输入参数错误 * - -ERR_MALLOC_MEMORY 分配内存失败 * - -ERR_CREATE_COMMOBJECT 创建 COM 对象失败 * - -ERR_SYS_CALL 调用 COM 接口失败 * - -ERR_ITEM_UNEXISTS GUID 不存在 * - ERR_SUCCESS 成功 */ TUNNEL_API int __cdecl GetInterfaceNameByGUID(const TCHAR *pGUID, TCHAR ifName[MAX_NETCARD_NAME]); /** * @brief 根据网卡名获取网卡索引 * @param[in] pInterfaceName 网卡名称 * @param[out] pIfIndex 网卡 Index * @return 函数执行结果 0: 成功, 小于0 失败 @see USER_ERRNO * - -ERR_INPUT_PARAMS 输入参数错误 * - -ERR_ITEM_UNEXISTS 网卡不存在 * - -ERR_SYS_CALL 获取操作系统网卡适配器失败 * - -ERR_MALLOC_MEMORY 分配内存失败 * - ERR_SUCCESS 成功 */ TUNNEL_API int __cdecl GetInterfaceIfIndexByName(const TCHAR *pInterfaceName, int *pIfIndex); /** * @brief 根据网卡名获取网卡 GUID * @param[in] ifIndex 网卡索引 * @param[out] pGuid 网卡 GUID * @return 函数执行结果 0: 成功, 小于0 失败 @see USER_ERRNO * - -ERR_INPUT_PARAMS 输入参数错误 * - -ERR_ITEM_UNEXISTS 网卡不存在 * - -ERR_MEMORY_STR 字符串转 GUID 结构体失败 * - -ERR_MALLOC_MEMORY 分配内存失败 * - ERR_SUCCESS 成功 */ TUNNEL_API int __cdecl GetInterfaceGUIDByIfIndex(const int ifIndex, GUID *pGuid); /** * @brief 根据网卡名获取网卡 GUID * @param[in] pInterfaceName 网卡名称 * @param[out] pGuid 网卡 GUID * @return 函数执行结果 0: 成功, 小于0 失败 @see USER_ERRNO * - -ERR_INPUT_PARAMS 输入参数错误 * - -ERR_ITEM_UNEXISTS 网卡不存在 * - -ERR_MEMORY_STR 字符串转 GUID 结构体失败 * - -ERR_MALLOC_MEMORY 分配内存失败 * - ERR_SUCCESS 成功 */ TUNNEL_API int __cdecl GetInterfaceGUIDByName(const TCHAR *pInterfaceName, GUID *pGuid); TUNNEL_API int __cdecl WaitNetAdapterConnected(const TCHAR *pInterfaceName, int timeOutOfMs); /** * @brief 判断当前网络适配器是否拥有 Internet 连接 * @param[in] ifIndex 网卡适配器索引 * @param[in] pRet 连接属性 * - TRUE 网卡适配器具有 Internet 连接 * - FALSE 网卡适配器无 Internet 连接 * @return 函数执行结果 0: 成功, 小于0 失败 @see USER_ERRNO * - -ERR_INPUT_PARAMS 输入参数错误 * - -ERR_GET_IPFOWARDTBL 获取防火墙信息失败 * - ERR_SUCCESS 成功 */ TUNNEL_API int __cdecl IsInternetConnectAdapter(int ifIndex, bool *pRet); /** * @brief 获取网卡 NetworkCategory 是否设置为 Private 模式 * @param[in] pInterfaceName 网卡名称 * @param[out] pIsPrivate 网卡属性 * - TRUE Private 模式 * - FALSE Public 模式 * @return 函数执行结果 0: 成功, 小于0 失败 @see USER_ERRNO * - -ERR_INPUT_PARAMS 输入参数错误 * - -ERR_CREATE_COMMOBJECT 创建 COM 对象失败 * - -ERR_SYS_CALL 调用 COM 接口失败 * - -ERR_ITEM_UNEXISTS 当前网络接口不存在不存在 * - -ERR_MEMORY_STR 字符集转换失败 * - ERR_SUCCESS 成功 */ TUNNEL_API int __cdecl GetNetConnectionNetworkCategory(const TCHAR *pInterfaceName, bool *pIsPrivate); /** * @brief 启动/停止 Windows 网络共享服务 * @param[in] ifIndex 网卡索引 * @param[in] isEnable 启动/停止 Windows 网络共享服务 * - TRUE 启动服务 * - FALSE 停止服务 * @param[in] isSetPrivate 共享连接属性 * -TRUE 私有连接 * -FALSE 公共连接 * @return 函数执行结果 0: 成功, 小于0 失败 @see USER_ERRNO * - -ERR_INPUT_PARAMS 输入参数错误 * - -ERR_CREATE_COMMOBJECT 创建 COM 对象失败 * - -ERR_SYS_CALL 调用 COM 接口失败 * - -ERR_ITEM_UNEXISTS GUID 不存在 * - -ERR_NET_UNCONNECT 网络未连接 * - ERR_SUCCESS 成功 */ NETWORK_API int __cdecl SetNetIntelnetConnectionSharing(int ifIndex, bool isEnable, bool isSetPrivate); /** * @brief 获取当前网络共享服务状态 * @param[in] ifIndex 网卡名称索引 * @param[out] pIsEnable 当前网络共享服务状态 * - TRUE 启动 * - FALSE 停止 * @return 函数执行结果 0: 成功, 小于0 失败 @see USER_ERRNO * - -ERR_INPUT_PARAMS 输入参数错误 * - -ERR_CREATE_COMMOBJECT 创建 COM 对象失败 * - -ERR_SYS_CALL 调用 COM 接口失败 * - -ERR_ITEM_UNEXISTS GUID 不存在 * - -ERR_NET_UNCONNECT 网络未连接 * - -ERR_CALL_COMMOBJECT 获取网络共享状态失败 * - ERR_SUCCESS 成功 */ NETWORK_API int __cdecl GetNetIntelnetConnectionSharing(int ifIndex, bool *pIsEnable); /** * @brief 设置网卡为 Private/Public 模式 * @param[in] pInterfaceName pInterfaceName 网卡名称 * @param[in] isPrivate 网卡 Category 模式 * - TRUE Private 模式 * - FALSE Public 模式 * @return 函数执行结果 0: 成功, 小于0 失败 @see USER_ERRNO * - -ERR_INPUT_PARAMS 输入参数错误 * - -ERR_MEMORY_STR 字符串处理 * - -ERR_CALL_SHELL 调用系统命令行失败 * - -ERR_PROCESS_RETURN 系统调用执行结束返回失败 * - ERR_SUCCESS 成功 */ NETWORK_API int __cdecl SetNetConnectionNetworkCategory(const TCHAR *pInterfaceName, const bool isPrivate); /** * @brief 添加系统路由表项 * @param[in] pIP 目的 IP 地址 * @param[in] pMask 目的子网掩码 * @param[in] pGateway 路由网关 * @return 函数执行结果 0: 成功, 小于0 失败 @see USER_ERRNO * - -ERR_INPUT_PARAMS 输入参数错误 * - -ERR_UN_SUPPORT IP地址转网络字节序网络地址失败 * - -ERR_NET_ADD_ROUTE 添加路由表项失败 * - -ERR_NET_REMOVE_ROUTE 删除路由表项失败 * - ERR_SUCCESS 成功 */ NETWORK_API int __cdecl AddRouteTable(const char *pIP, const char *pMask, const char *pGateway); /** * @brief 开启 Windows WireGuard NAT 转发功能 * @param[in] pInterfaceName 网卡名称 * @param[in] pCidrIpaddr CIDR 网络接口地址 * @return 函数执行结果 0: 成功, 小于0 失败 @see USER_ERRNO * - -ERR_INPUT_PARAMS 输入参数错误 * - -ERR_MEMORY_STR 字符串处理 * - -ERR_CALL_SHELL 调用系统命令行失败 * - -ERR_PROCESS_RETURN 系统调用执行结束返回失败 * - ERR_SUCCESS 成功 */ TUNNEL_API int __cdecl SetNATRule(const TCHAR *pInterfaceName, const TCHAR *pCidrIpaddr); /** * @brief 关闭 Windows WireGuard NAT 转发功能 * @param pInterfaceName 网卡名称 * @return 函数执行结果 0: 成功, 小于0 失败 @see USER_ERRNO * - -ERR_INPUT_PARAMS 输入参数错误 * - -ERR_MEMORY_STR 字符串处理 * - -ERR_CALL_SHELL 调用系统命令行失败 * - -ERR_PROCESS_RETURN 系统调用执行结束返回失败 * - ERR_SUCCESS 成功 */ TUNNEL_API int __cdecl RemoveNATRule(const TCHAR *pInterfaceName); TUNNEL_API int __cdecl CreatePorxyService(); #if 0 /** * @brief 获取Windows Hyper-V 虚拟机状态, 必须开启后才能开启NAT转发功能 * @param[out] pEnabled 当前 Hyper-V 虚拟机状态, TRUE 表示开启, FALSE 表示关闭 * @return 函数执行结果 0: 成功, 小于0 失败 @see USER_ERRNO * - -ERR_INPUT_PARAMS 输入参数错误 * - -ERR_MEMORY_STR 字符串处理 * - -ERR_CALL_SHELL 调用系统命令行失败 * - ERR_SUCCESS 成功 */ TUNNEL_API int __cdecl GetWindowsHyperVStatus(int *pEnabled); /** * @brief 启用/禁用 Windows Hyper-V 功能 * @param[in] enabled TRUE 启用, FALSE 关闭 * @return 函数执行结果 0: 成功, 小于0 失败 @see USER_ERRNO * - -ERR_INPUT_PARAMS 输入参数错误 * - -ERR_MEMORY_STR 字符串处理 * - -ERR_CALL_SHELL 调用系统命令行失败 * - -ERR_PROCESS_RETURN 系统调用执行结束返回失败 * - ERR_SUCCESS 成功 */ TUNNEL_API int __cdecl EnableWindowsHyperV(bool enabled); /** * @brief 设置网卡为 Private/Public 模式 * @param[in] pInterfaceName 网卡名称 * @param[in] isPrivate * - TRUE Private 模式 * - FALSE Public 模式 * @return 函数执行结果 0: 成功, 小于0 失败 @see USER_ERRNO * - -ERR_INPUT_PARAMS 输入参数错误 * - -ERR_MEMORY_STR 字符串处理 * - -ERR_CALL_SHELL 调用系统命令行失败 * - -ERR_PROCESS_RETURN 系统调用执行结束返回失败 * - ERR_SUCCESS 成功 */ TUNNEL_API int __cdecl SetInterfacePrivate(const TCHAR *pInterfaceName, bool isPrivate); /** * @brief 获取网卡 NetworkCategory 是否设置为 Private 模式 * @param[in] pInterfaceName 网卡名称 * @param[out] pIsPrivateMode 网卡属性 * - TRUE Private 模式 * - FALSE Public 模式 * @return 函数执行结果 0: 成功, 小于0 失败 @see USER_ERRNO * - -ERR_INPUT_PARAMS 输入参数错误 * - -ERR_MEMORY_STR 字符串处理 * - -ERR_ITEM_UNEXISTS 设备不存在 * - -ERR_CALL_SHELL 调用系统命令行失败 * - -ERR_PROCESS_RETURN 系统调用执行结束返回失败 * - ERR_SUCCESS 成功 */ TUNNEL_API int __cdecl IsInterfacePrivate(const TCHAR *pInterfaceName, bool *pIsPrivateMode); /** * @brief 获取网卡接口索引编号 * @param[in] pInterfaceName 网卡名称 * @param[out] pIndex 网卡索引 * @return 函数执行结果 0: 成功, 小于0 失败 @see USER_ERRNO * - -ERR_INPUT_PARAMS 输入参数错误 * - -ERR_MALLOC_MEMORY 分配内存失败 * - -ERR_MEMORY_STR 字符串处理 * - -ERR_CALL_SHELL 调用系统命令行失败 * - ERR_SUCCESS 成功 */ TUNNEL_API int __cdecl GetInterfaceIndexByName(const TCHAR *pInterfaceName, int *pIndex); /** * @brief 删除接口网络地址 * @param[in] pInterfaceName 网卡名称 * @return 函数执行结果 0: 成功, 小于0 失败 @see USER_ERRNO * - -ERR_INPUT_PARAMS 输入参数错误 * - -ERR_MALLOC_MEMORY 分配内存失败 * - -ERR_MEMORY_STR 字符串处理 * - -ERR_CALL_SHELL 调用系统命令行失败 * - ERR_SUCCESS 成功 */ TUNNEL_API int __cdecl RemoveInterfaceIpAddress(const TCHAR *pInterfaceName); /** * @brief 设置网络接口IP地址 * @param[in] pInterfaceName 网卡名称 * @param[in] pCidrIpaddr CIDR类型IP地址 * @return 函数执行结果 0: 成功, 小于0 失败 @see USER_ERRNO * - -ERR_INPUT_PARAMS 输入参数错误 * - -ERR_MALLOC_MEMORY 分配内存失败 * - -ERR_MEMORY_STR 字符串处理 * - -ERR_CALL_SHELL 调用系统命令行失败 * - ERR_SUCCESS 成功 */ TUNNEL_API int __cdecl SetInterfaceIpAddressFromCIDR(const TCHAR *pInterfaceName, const TCHAR *pCidrIpaddr); /** * @brief 设置网络接口IP地址 * @param[in] pInterfaceName 网卡名称 * @param[in] pIpaddr IP 地址 * @param[in] pNetmask 子网掩码 * @return 函数执行结果 0: 成功, 小于0 失败 @see USER_ERRNO * - -ERR_INPUT_PARAMS 输入参数错误 * - -ERR_MALLOC_MEMORY 分配内存失败 * - -ERR_MEMORY_STR 字符串处理 * - -ERR_CALL_SHELL 调用系统命令行失败 * - ERR_SUCCESS 成功 */ TUNNEL_API int __cdecl SetInterfaceIpAddress(const TCHAR *pInterfaceName, const TCHAR *pIpaddr, const TCHAR *pNetmask); /** * @brief 获取网络连接NAT功能是否开启 * @param[in] pInterfaceName 网卡名称 * @param[out] pIsEnabled 网卡NAT当前是否开启 * - TRUE NAT 开启 * - FALSE NAT 关闭 * @return 函数执行结果 0: 成功, 小于0 失败 @see USER_ERRNO * - -ERR_INPUT_PARAMS 输入参数错误 * - -ERR_MEMORY_STR 字符串处理 * - -ERR_ITEM_UNEXISTS 设备不存在 * - -ERR_CALL_SHELL 调用系统命令行失败 * - -ERR_PROCESS_RETURN 系统调用执行结束返回失败 * - ERR_SUCCESS 成功 */ TUNNEL_API int __cdecl IsNetConnectionSharingEnabled(const TCHAR *pInterfaceName, bool *pIsEnabled); /** * @brief WireGuard 服务 Windows PowerShell 自定义命令是否安装 * @return * - TRUE 已经安装 * - FALSE 未安装 */ TUNNEL_API bool __cdecl IsCustomNatPSCmdInstalled(); #endif #ifdef __cplusplus } #endif