1e41f4b71Sopenharmony_ci# @ohos.net.vpn (VPN 管理)(系统接口) 2e41f4b71Sopenharmony_ci 3e41f4b71Sopenharmony_ciVPN 管理模块,支持 VPN 的启动和停止功能。 4e41f4b71Sopenharmony_ci本模块是操作系统提供的内置VPN功能,允许用户通过系统的网络设置进行VPN连接,通常提供的功能较少,而且有比较严格的限制。 5e41f4b71Sopenharmony_ci 6e41f4b71Sopenharmony_ci> **说明:** 7e41f4b71Sopenharmony_ci> 本模块首批接口从 API version 10 开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 8e41f4b71Sopenharmony_ci> 本模块为系统接口。 9e41f4b71Sopenharmony_ci 10e41f4b71Sopenharmony_ci## 导入模块 11e41f4b71Sopenharmony_ci 12e41f4b71Sopenharmony_ci```js 13e41f4b71Sopenharmony_ciimport { vpn } from '@kit.NetworkKit'; 14e41f4b71Sopenharmony_ci``` 15e41f4b71Sopenharmony_ci 16e41f4b71Sopenharmony_ci## vpn.createVpnConnection 17e41f4b71Sopenharmony_ci 18e41f4b71Sopenharmony_cicreateVpnConnection(context: AbilityContext): VpnConnection 19e41f4b71Sopenharmony_ci 20e41f4b71Sopenharmony_ci创建一个 VPN 连接对象。 21e41f4b71Sopenharmony_ci 22e41f4b71Sopenharmony_ci**系统接口**:此接口为系统接口。 23e41f4b71Sopenharmony_ci 24e41f4b71Sopenharmony_ci**系统能力**:SystemCapability.Communication.NetManager.Vpn 25e41f4b71Sopenharmony_ci 26e41f4b71Sopenharmony_ci**参数:** 27e41f4b71Sopenharmony_ci 28e41f4b71Sopenharmony_ci| 参数名 | 类型 | 必填 | 说明 | 29e41f4b71Sopenharmony_ci| ------- | -------------------------------------------------------------------------------- | ---- | ------------ | 30e41f4b71Sopenharmony_ci| context | [AbilityContext](../apis-ability-kit/js-apis-inner-application-uiAbilityContext.md#uiabilitycontext) | 是 | 指定 context | 31e41f4b71Sopenharmony_ci 32e41f4b71Sopenharmony_ci**返回值:** 33e41f4b71Sopenharmony_ci 34e41f4b71Sopenharmony_ci| 类型 | 说明 | 35e41f4b71Sopenharmony_ci| :------------------------------ | :---------------------- | 36e41f4b71Sopenharmony_ci| [VpnConnection](#vpnconnection) | 返回一个 VPN 连接对象。 | 37e41f4b71Sopenharmony_ci 38e41f4b71Sopenharmony_ci**错误码:** 39e41f4b71Sopenharmony_ci 40e41f4b71Sopenharmony_ci以下错误码的详细介绍参见[VPN 错误码](errorcode-net-vpn.md)。 41e41f4b71Sopenharmony_ci 42e41f4b71Sopenharmony_ci| 错误码 ID | 错误信息 | 43e41f4b71Sopenharmony_ci| --------- | ---------------- | 44e41f4b71Sopenharmony_ci| 202 | Non-system applications use system APIs. | 45e41f4b71Sopenharmony_ci| 401 | Parameter error. | 46e41f4b71Sopenharmony_ci 47e41f4b71Sopenharmony_ci**示例:** 48e41f4b71Sopenharmony_ciStage 模型示例: 49e41f4b71Sopenharmony_ci 50e41f4b71Sopenharmony_ci```ts 51e41f4b71Sopenharmony_ciimport { vpn } from '@kit.NetworkKit'; 52e41f4b71Sopenharmony_ciimport { common } from '@kit.AbilityKit'; 53e41f4b71Sopenharmony_ci 54e41f4b71Sopenharmony_ci@Entry 55e41f4b71Sopenharmony_ci@Component 56e41f4b71Sopenharmony_cistruct Index { 57e41f4b71Sopenharmony_ci private context = getContext(this) as common.UIAbilityContext; 58e41f4b71Sopenharmony_ci private VpnConnection: vpn.VpnConnection = vpn.createVpnConnection(this.context); 59e41f4b71Sopenharmony_ci functiontest() 60e41f4b71Sopenharmony_ci { 61e41f4b71Sopenharmony_ci console.info("vpn createVpnConnection: " + JSON.stringify(this.VpnConnection)); 62e41f4b71Sopenharmony_ci } 63e41f4b71Sopenharmony_ci build() { } 64e41f4b71Sopenharmony_ci} 65e41f4b71Sopenharmony_ci``` 66e41f4b71Sopenharmony_ci 67e41f4b71Sopenharmony_ci## VpnConnection 68e41f4b71Sopenharmony_ci 69e41f4b71Sopenharmony_ciVPN 连接对象。在调用 VpnConnection 的方法前,需要先通过[vpn.createVpnConnection](#vpncreatevpnconnection)创建 VPN 连接对象。 70e41f4b71Sopenharmony_ci 71e41f4b71Sopenharmony_ci### setUp 72e41f4b71Sopenharmony_ci 73e41f4b71Sopenharmony_cisetUp(config: VpnConfig, callback: AsyncCallback\<number\>): void 74e41f4b71Sopenharmony_ci 75e41f4b71Sopenharmony_ci使用 config 创建一个 vpn 网络,使用 callback 方式作为异步方法。 76e41f4b71Sopenharmony_ci 77e41f4b71Sopenharmony_ci**系统接口**:此接口为系统接口。 78e41f4b71Sopenharmony_ci 79e41f4b71Sopenharmony_ci**需要权限**:ohos.permission.MANAGE_VPN 80e41f4b71Sopenharmony_ci 81e41f4b71Sopenharmony_ci**系统能力**:SystemCapability.Communication.NetManager.Vpn 82e41f4b71Sopenharmony_ci 83e41f4b71Sopenharmony_ci**参数:** 84e41f4b71Sopenharmony_ci 85e41f4b71Sopenharmony_ci| 参数名 | 类型 | 必填 | 说明 | 86e41f4b71Sopenharmony_ci| -------- | ----------------------- | ---- | -------------------------------------------------------------------------------------------------- | 87e41f4b71Sopenharmony_ci| config | [VpnConfig](#vpnconfig) | 是 | 指定 VPN 网络的配置信息。 | 88e41f4b71Sopenharmony_ci| callback | AsyncCallback\<number\> | 是 | 回调函数,当成功启动 VPN 网络时,返回虚拟网卡的文件描述符 fd, error 为 undefined,否则为错误对象。 | 89e41f4b71Sopenharmony_ci 90e41f4b71Sopenharmony_ci**错误码:** 91e41f4b71Sopenharmony_ci 92e41f4b71Sopenharmony_ci以下错误码的详细介绍参见[VPN 错误码](errorcode-net-vpn.md)。 93e41f4b71Sopenharmony_ci 94e41f4b71Sopenharmony_ci| 错误码 ID | 错误信息 | 95e41f4b71Sopenharmony_ci| --------- | ------------------------------------------------ | 96e41f4b71Sopenharmony_ci| 201 | Permission denied. | 97e41f4b71Sopenharmony_ci| 202 | Non-system applications use system APIs. | 98e41f4b71Sopenharmony_ci| 401 | Parameter error. | 99e41f4b71Sopenharmony_ci| 2200001 | Invalid parameter value. | 100e41f4b71Sopenharmony_ci| 2200002 | Operation failed. Cannot connect to service. | 101e41f4b71Sopenharmony_ci| 2200003 | System internal error. | 102e41f4b71Sopenharmony_ci| 2203001 | VPN creation denied. Check the user type. | 103e41f4b71Sopenharmony_ci| 2203002 | VPN already exists. | 104e41f4b71Sopenharmony_ci 105e41f4b71Sopenharmony_ci**示例:** 106e41f4b71Sopenharmony_ci 107e41f4b71Sopenharmony_ci```js 108e41f4b71Sopenharmony_ciimport { vpn } from '@kit.NetworkKit'; 109e41f4b71Sopenharmony_ciimport { common } from '@kit.AbilityKit'; 110e41f4b71Sopenharmony_ciimport { BusinessError } from '@kit.BasicServicesKit'; 111e41f4b71Sopenharmony_ci 112e41f4b71Sopenharmony_ci@Entry 113e41f4b71Sopenharmony_ci@Component 114e41f4b71Sopenharmony_cistruct Index { 115e41f4b71Sopenharmony_ci private context = getContext(this) as common.UIAbilityContext; 116e41f4b71Sopenharmony_ci private VpnConnection: vpn.VpnConnection = vpn.createVpnConnection(this.context); 117e41f4b71Sopenharmony_ci SetUp(): void { 118e41f4b71Sopenharmony_ci let config: vpn.VpnConfig = { 119e41f4b71Sopenharmony_ci addresses: [{ 120e41f4b71Sopenharmony_ci address: { 121e41f4b71Sopenharmony_ci address: "10.0.0.5", 122e41f4b71Sopenharmony_ci family: 1 123e41f4b71Sopenharmony_ci }, 124e41f4b71Sopenharmony_ci prefixLength: 24 125e41f4b71Sopenharmony_ci }], 126e41f4b71Sopenharmony_ci mtu: 1400, 127e41f4b71Sopenharmony_ci dnsAddresses: ["114.114.114.114"] 128e41f4b71Sopenharmony_ci } 129e41f4b71Sopenharmony_ci this.VpnConnection.setUp(config, (error: BusinessError, data: number) => { 130e41f4b71Sopenharmony_ci console.info(JSON.stringify(error)); 131e41f4b71Sopenharmony_ci console.info("tunfd: " + JSON.stringify(data)); 132e41f4b71Sopenharmony_ci }); 133e41f4b71Sopenharmony_ci } 134e41f4b71Sopenharmony_ci build() { } 135e41f4b71Sopenharmony_ci} 136e41f4b71Sopenharmony_ci``` 137e41f4b71Sopenharmony_ci 138e41f4b71Sopenharmony_ci### setUp 139e41f4b71Sopenharmony_ci 140e41f4b71Sopenharmony_cisetUp(config: VpnConfig): Promise\<number\> 141e41f4b71Sopenharmony_ci 142e41f4b71Sopenharmony_ci使用 config 创建一个 vpn 网络,使用 Promise 方式作为异步方法。 143e41f4b71Sopenharmony_ci 144e41f4b71Sopenharmony_ci**系统接口**:此接口为系统接口。 145e41f4b71Sopenharmony_ci 146e41f4b71Sopenharmony_ci**需要权限**:ohos.permission.MANAGE_VPN 147e41f4b71Sopenharmony_ci 148e41f4b71Sopenharmony_ci**系统能力**:SystemCapability.Communication.NetManager.Vpn 149e41f4b71Sopenharmony_ci 150e41f4b71Sopenharmony_ci**参数:** 151e41f4b71Sopenharmony_ci 152e41f4b71Sopenharmony_ci| 参数名 | 类型 | 必填 | 说明 | 153e41f4b71Sopenharmony_ci| ------ | ----------------------- | ---- | ------------------------- | 154e41f4b71Sopenharmony_ci| config | [VpnConfig](#vpnconfig) | 是 | 指定 VPN 网络的配置信息。 | 155e41f4b71Sopenharmony_ci 156e41f4b71Sopenharmony_ci**返回值:** 157e41f4b71Sopenharmony_ci 158e41f4b71Sopenharmony_ci| 类型 | 说明 | 159e41f4b71Sopenharmony_ci| ----------------- | -------------------------------------------------------------- | 160e41f4b71Sopenharmony_ci| Promise\<number\> | 以 Promise 形式返回获取结果,返回指定虚拟网卡的文件描述符 fd。 | 161e41f4b71Sopenharmony_ci 162e41f4b71Sopenharmony_ci**错误码:** 163e41f4b71Sopenharmony_ci 164e41f4b71Sopenharmony_ci以下错误码的详细介绍参见[VPN 错误码](errorcode-net-vpn.md)。 165e41f4b71Sopenharmony_ci 166e41f4b71Sopenharmony_ci| 错误码 ID | 错误信息 | 167e41f4b71Sopenharmony_ci| --------- | ------------------------------------------------ | 168e41f4b71Sopenharmony_ci| 201 | Permission denied. | 169e41f4b71Sopenharmony_ci| 202 | Non-system applications use system APIs. | 170e41f4b71Sopenharmony_ci| 401 | Parameter error. | 171e41f4b71Sopenharmony_ci| 2200001 | Invalid parameter value. | 172e41f4b71Sopenharmony_ci| 2200002 | Operation failed. Cannot connect to service. | 173e41f4b71Sopenharmony_ci| 2200003 | System internal error. | 174e41f4b71Sopenharmony_ci| 2203001 | VPN creation denied. Check the user type. | 175e41f4b71Sopenharmony_ci| 2203002 | VPN already exists. | 176e41f4b71Sopenharmony_ci 177e41f4b71Sopenharmony_ci**示例:** 178e41f4b71Sopenharmony_ci 179e41f4b71Sopenharmony_ci```js 180e41f4b71Sopenharmony_ciimport { vpn } from '@kit.NetworkKit'; 181e41f4b71Sopenharmony_ciimport { common } from '@kit.AbilityKit'; 182e41f4b71Sopenharmony_ciimport { BusinessError } from '@kit.BasicServicesKit'; 183e41f4b71Sopenharmony_ci 184e41f4b71Sopenharmony_ci@Entry 185e41f4b71Sopenharmony_ci@Component 186e41f4b71Sopenharmony_cistruct Index { 187e41f4b71Sopenharmony_ci private context = getContext(this) as common.UIAbilityContext; 188e41f4b71Sopenharmony_ci private VpnConnection: vpn.VpnConnection = vpn.createVpnConnection(this.context); 189e41f4b71Sopenharmony_ci SetUp(): void { 190e41f4b71Sopenharmony_ci let config: vpn.VpnConfig = { 191e41f4b71Sopenharmony_ci addresses: [{ 192e41f4b71Sopenharmony_ci address: { 193e41f4b71Sopenharmony_ci address: "10.0.0.5", 194e41f4b71Sopenharmony_ci family: 1 195e41f4b71Sopenharmony_ci }, 196e41f4b71Sopenharmony_ci prefixLength: 24 197e41f4b71Sopenharmony_ci }], 198e41f4b71Sopenharmony_ci mtu: 1400, 199e41f4b71Sopenharmony_ci dnsAddresses: ["114.114.114.114"] 200e41f4b71Sopenharmony_ci } 201e41f4b71Sopenharmony_ci this.VpnConnection.setUp(config).then((data: number) => { 202e41f4b71Sopenharmony_ci console.info("setUp success, tunfd: " + JSON.stringify(data)); 203e41f4b71Sopenharmony_ci }).catch((err: BusinessError) => { 204e41f4b71Sopenharmony_ci console.info("setUp fail" + JSON.stringify(err)); 205e41f4b71Sopenharmony_ci }); 206e41f4b71Sopenharmony_ci } 207e41f4b71Sopenharmony_ci build() { } 208e41f4b71Sopenharmony_ci} 209e41f4b71Sopenharmony_ci``` 210e41f4b71Sopenharmony_ci 211e41f4b71Sopenharmony_ci### protect 212e41f4b71Sopenharmony_ci 213e41f4b71Sopenharmony_ciprotect(socketFd: number, callback: AsyncCallback\<void\>): void 214e41f4b71Sopenharmony_ci 215e41f4b71Sopenharmony_ci保护套接字不受 VPN 连接影响,通过该套接字发送的数据将直接基于物理网络收发,因此其流量不会通过 VPN 转发,使用 callback 方式作为异步方法。 216e41f4b71Sopenharmony_ci 217e41f4b71Sopenharmony_ci**系统接口**:此接口为系统接口。 218e41f4b71Sopenharmony_ci 219e41f4b71Sopenharmony_ci**需要权限**:ohos.permission.MANAGE_VPN 220e41f4b71Sopenharmony_ci 221e41f4b71Sopenharmony_ci**系统能力**:SystemCapability.Communication.NetManager.Vpn 222e41f4b71Sopenharmony_ci 223e41f4b71Sopenharmony_ci**参数:** 224e41f4b71Sopenharmony_ci 225e41f4b71Sopenharmony_ci| 参数名 | 类型 | 必填 | 说明 | 226e41f4b71Sopenharmony_ci| -------- | --------------------- | ---- | ----------------------------------------------------------------------------------------- | 227e41f4b71Sopenharmony_ci| socketFd | number | 是 | 指定保护的 socketfd, 该文件描述符通过[getSocketFd](js-apis-socket.md#getsocketfd10)获取。 | 228e41f4b71Sopenharmony_ci| callback | AsyncCallback\<void\> | 是 | 回调函数,成功时,error 为 undefined,失败返回错误码错误信息。 | 229e41f4b71Sopenharmony_ci 230e41f4b71Sopenharmony_ci**错误码:** 231e41f4b71Sopenharmony_ci 232e41f4b71Sopenharmony_ci以下错误码的详细介绍参见[VPN 错误码](errorcode-net-vpn.md)。 233e41f4b71Sopenharmony_ci 234e41f4b71Sopenharmony_ci| 错误码 ID | 错误信息 | 235e41f4b71Sopenharmony_ci| --------- | -------------------------------------------- | 236e41f4b71Sopenharmony_ci| 201 | Permission denied. | 237e41f4b71Sopenharmony_ci| 202 | Non-system applications use system APIs. | 238e41f4b71Sopenharmony_ci| 401 | Parameter error. | 239e41f4b71Sopenharmony_ci| 2200001 | Invalid parameter value. | 240e41f4b71Sopenharmony_ci| 2200002 | Operation failed. Cannot connect to service. | 241e41f4b71Sopenharmony_ci| 2200003 | System internal error. | 242e41f4b71Sopenharmony_ci| 2203004 | Invalid socket file descriptor. | 243e41f4b71Sopenharmony_ci 244e41f4b71Sopenharmony_ci**示例:** 245e41f4b71Sopenharmony_ci 246e41f4b71Sopenharmony_ci```js 247e41f4b71Sopenharmony_ciimport { socket, vpn } from '@kit.NetworkKit'; 248e41f4b71Sopenharmony_ciimport { common } from '@kit.AbilityKit'; 249e41f4b71Sopenharmony_ciimport { BusinessError } from '@kit.BasicServicesKit'; 250e41f4b71Sopenharmony_ci 251e41f4b71Sopenharmony_ci@Entry 252e41f4b71Sopenharmony_ci@Component 253e41f4b71Sopenharmony_cistruct Index { 254e41f4b71Sopenharmony_ci private context = getContext(this) as common.UIAbilityContext; 255e41f4b71Sopenharmony_ci private VpnConnection: vpn.VpnConnection = vpn.createVpnConnection(this.context); 256e41f4b71Sopenharmony_ci 257e41f4b71Sopenharmony_ci Protect(): void { 258e41f4b71Sopenharmony_ci let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 259e41f4b71Sopenharmony_ci let ipAddress: socket.NetAddress = { 260e41f4b71Sopenharmony_ci address: "0.0.0.0" 261e41f4b71Sopenharmony_ci } 262e41f4b71Sopenharmony_ci tcp.bind(ipAddress); 263e41f4b71Sopenharmony_ci let netAddress: socket.NetAddress = { 264e41f4b71Sopenharmony_ci address: "192.168.1.11", 265e41f4b71Sopenharmony_ci port: 8888 266e41f4b71Sopenharmony_ci } 267e41f4b71Sopenharmony_ci let addressConnect: socket.TCPConnectOptions = { 268e41f4b71Sopenharmony_ci address: netAddress, 269e41f4b71Sopenharmony_ci timeout: 6000 270e41f4b71Sopenharmony_ci } 271e41f4b71Sopenharmony_ci tcp.connect(addressConnect); 272e41f4b71Sopenharmony_ci tcp.getSocketFd().then((tunnelfd: number) => { 273e41f4b71Sopenharmony_ci console.info("tunenlfd: " + tunnelfd); 274e41f4b71Sopenharmony_ci this.VpnConnection.protect(tunnelfd, (error: BusinessError) => { 275e41f4b71Sopenharmony_ci console.info(JSON.stringify(error)); 276e41f4b71Sopenharmony_ci }); 277e41f4b71Sopenharmony_ci }); 278e41f4b71Sopenharmony_ci } 279e41f4b71Sopenharmony_ci build() { } 280e41f4b71Sopenharmony_ci} 281e41f4b71Sopenharmony_ci``` 282e41f4b71Sopenharmony_ci 283e41f4b71Sopenharmony_ci### protect 284e41f4b71Sopenharmony_ci 285e41f4b71Sopenharmony_ciprotect(socketFd: number): Promise\<void\> 286e41f4b71Sopenharmony_ci 287e41f4b71Sopenharmony_ci保护套接字不受 VPN 连接影响,通过该套接字发送的数据将直接基于物理网络收发,因此其流量不会通过 VPN 转发, 使用 Promise 方式作为异步方法。 288e41f4b71Sopenharmony_ci 289e41f4b71Sopenharmony_ci**系统接口**:此接口为系统接口。 290e41f4b71Sopenharmony_ci 291e41f4b71Sopenharmony_ci**需要权限**:ohos.permission.MANAGE_VPN 292e41f4b71Sopenharmony_ci 293e41f4b71Sopenharmony_ci**系统能力**:SystemCapability.Communication.NetManager.Vpn 294e41f4b71Sopenharmony_ci 295e41f4b71Sopenharmony_ci**参数:** 296e41f4b71Sopenharmony_ci 297e41f4b71Sopenharmony_ci| 参数名 | 类型 | 必填 | 说明 | 298e41f4b71Sopenharmony_ci| -------- | ------ | ---- | ------------------------------------------------------------------------------------------- | 299e41f4b71Sopenharmony_ci| socketFd | number | 是 | 指定保护的 socketfd, 该文件描述符通过[getSocketFd](js-apis-socket.md#getsocketfd10-1)获取。 | 300e41f4b71Sopenharmony_ci 301e41f4b71Sopenharmony_ci**返回值:** 302e41f4b71Sopenharmony_ci 303e41f4b71Sopenharmony_ci| 类型 | 说明 | 304e41f4b71Sopenharmony_ci| --------------- | ----------------------------------------------------- | 305e41f4b71Sopenharmony_ci| Promise\<void\> | 以 Promise 形式返回设定结果,失败返回错误码错误信息。 | 306e41f4b71Sopenharmony_ci 307e41f4b71Sopenharmony_ci**错误码:** 308e41f4b71Sopenharmony_ci 309e41f4b71Sopenharmony_ci以下错误码的详细介绍参见[VPN 错误码](errorcode-net-vpn.md)。 310e41f4b71Sopenharmony_ci 311e41f4b71Sopenharmony_ci| 错误码 ID | 错误信息 | 312e41f4b71Sopenharmony_ci| --------- | -------------------------------------------- | 313e41f4b71Sopenharmony_ci| 201 | Permission denied. | 314e41f4b71Sopenharmony_ci| 202 | Non-system applications use system APIs. | 315e41f4b71Sopenharmony_ci| 401 | Parameter error. | 316e41f4b71Sopenharmony_ci| 2200001 | Invalid parameter value. | 317e41f4b71Sopenharmony_ci| 2200002 | Operation failed. Cannot connect to service. | 318e41f4b71Sopenharmony_ci| 2200003 | System internal error. | 319e41f4b71Sopenharmony_ci| 2203004 | Invalid socket file descriptor. | 320e41f4b71Sopenharmony_ci 321e41f4b71Sopenharmony_ci**示例:** 322e41f4b71Sopenharmony_ci 323e41f4b71Sopenharmony_ci```js 324e41f4b71Sopenharmony_ciimport { socket, vpn } from '@kit.NetworkKit'; 325e41f4b71Sopenharmony_ciimport { common } from '@kit.AbilityKit'; 326e41f4b71Sopenharmony_ciimport { BusinessError } from '@kit.BasicServicesKit'; 327e41f4b71Sopenharmony_ci 328e41f4b71Sopenharmony_ci@Entry 329e41f4b71Sopenharmony_ci@Component 330e41f4b71Sopenharmony_cistruct Index { 331e41f4b71Sopenharmony_ci private context = getContext(this) as common.UIAbilityContext; 332e41f4b71Sopenharmony_ci private VpnConnection: vpn.VpnConnection = vpn.createVpnConnection(this.context); 333e41f4b71Sopenharmony_ci 334e41f4b71Sopenharmony_ci Protect(): void { 335e41f4b71Sopenharmony_ci let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 336e41f4b71Sopenharmony_ci let ipAddress: socket.NetAddress = { 337e41f4b71Sopenharmony_ci address: "0.0.0.0" 338e41f4b71Sopenharmony_ci } 339e41f4b71Sopenharmony_ci tcp.bind(ipAddress); 340e41f4b71Sopenharmony_ci let netAddress: socket.NetAddress = { 341e41f4b71Sopenharmony_ci address: "192.168.1.11", 342e41f4b71Sopenharmony_ci port: 8888 343e41f4b71Sopenharmony_ci } 344e41f4b71Sopenharmony_ci let addressConnect: socket.TCPConnectOptions = { 345e41f4b71Sopenharmony_ci address: netAddress, 346e41f4b71Sopenharmony_ci timeout: 6000 347e41f4b71Sopenharmony_ci } 348e41f4b71Sopenharmony_ci tcp.connect(addressConnect); 349e41f4b71Sopenharmony_ci tcp.getSocketFd().then((tunnelfd: number) => { 350e41f4b71Sopenharmony_ci console.info("tunenlfd: " + tunnelfd); 351e41f4b71Sopenharmony_ci this.VpnConnection.protect(tunnelfd).then(() => { 352e41f4b71Sopenharmony_ci console.info("protect success."); 353e41f4b71Sopenharmony_ci }).catch((err: BusinessError) => { 354e41f4b71Sopenharmony_ci console.info("protect fail" + JSON.stringify(err)); 355e41f4b71Sopenharmony_ci }); 356e41f4b71Sopenharmony_ci }); 357e41f4b71Sopenharmony_ci } 358e41f4b71Sopenharmony_ci build() { } 359e41f4b71Sopenharmony_ci} 360e41f4b71Sopenharmony_ci``` 361e41f4b71Sopenharmony_ci 362e41f4b71Sopenharmony_ci### destroy 363e41f4b71Sopenharmony_ci 364e41f4b71Sopenharmony_cidestroy(callback: AsyncCallback\<void\>): void 365e41f4b71Sopenharmony_ci 366e41f4b71Sopenharmony_ci销毁启动的 VPN 网络,使用 callback 方式作为异步方法。 367e41f4b71Sopenharmony_ci 368e41f4b71Sopenharmony_ci**系统接口**:此接口为系统接口。 369e41f4b71Sopenharmony_ci 370e41f4b71Sopenharmony_ci**需要权限**:ohos.permission.MANAGE_VPN 371e41f4b71Sopenharmony_ci 372e41f4b71Sopenharmony_ci**系统能力**:SystemCapability.Communication.NetManager.Vpn 373e41f4b71Sopenharmony_ci 374e41f4b71Sopenharmony_ci**参数:** 375e41f4b71Sopenharmony_ci 376e41f4b71Sopenharmony_ci| 参数名 | 类型 | 必填 | 说明 | 377e41f4b71Sopenharmony_ci| -------- | --------------------- | ---- | -------------------------------------------------------------- | 378e41f4b71Sopenharmony_ci| callback | AsyncCallback\<void\> | 是 | 回调函数,成功时,error 为 undefined,失败返回错误码错误信息。 | 379e41f4b71Sopenharmony_ci 380e41f4b71Sopenharmony_ci**错误码:** 381e41f4b71Sopenharmony_ci 382e41f4b71Sopenharmony_ci以下错误码的详细介绍参见[VPN 错误码](errorcode-net-vpn.md)。 383e41f4b71Sopenharmony_ci 384e41f4b71Sopenharmony_ci| 错误码 ID | 错误信息 | 385e41f4b71Sopenharmony_ci| --------- | -------------------------------------------- | 386e41f4b71Sopenharmony_ci| 201 | Permission denied. | 387e41f4b71Sopenharmony_ci| 202 | Non-system applications use system APIs. | 388e41f4b71Sopenharmony_ci| 401 | Parameter error. | 389e41f4b71Sopenharmony_ci| 2200002 | Operation failed. Cannot connect to service. | 390e41f4b71Sopenharmony_ci| 2200003 | System internal error. | 391e41f4b71Sopenharmony_ci 392e41f4b71Sopenharmony_ci**示例:** 393e41f4b71Sopenharmony_ci 394e41f4b71Sopenharmony_ci```js 395e41f4b71Sopenharmony_ciimport { vpn } from '@kit.NetworkKit'; 396e41f4b71Sopenharmony_ciimport { common } from '@kit.AbilityKit'; 397e41f4b71Sopenharmony_ciimport { BusinessError } from '@kit.BasicServicesKit'; 398e41f4b71Sopenharmony_ci 399e41f4b71Sopenharmony_ci@Entry 400e41f4b71Sopenharmony_ci@Component 401e41f4b71Sopenharmony_cistruct Index { 402e41f4b71Sopenharmony_ci private context = getContext(this) as common.UIAbilityContext; 403e41f4b71Sopenharmony_ci private VpnConnection: vpn.VpnConnection = vpn.createVpnConnection(this.context); 404e41f4b71Sopenharmony_ci Destroy(): void { 405e41f4b71Sopenharmony_ci this.VpnConnection.destroy((error: BusinessError) => { 406e41f4b71Sopenharmony_ci console.info(JSON.stringify(error)); 407e41f4b71Sopenharmony_ci }); 408e41f4b71Sopenharmony_ci } 409e41f4b71Sopenharmony_ci build() { } 410e41f4b71Sopenharmony_ci} 411e41f4b71Sopenharmony_ci``` 412e41f4b71Sopenharmony_ci 413e41f4b71Sopenharmony_ci### destroy 414e41f4b71Sopenharmony_ci 415e41f4b71Sopenharmony_cidestroy(): Promise\<void\> 416e41f4b71Sopenharmony_ci 417e41f4b71Sopenharmony_ci销毁启动的 VPN 网络,使用 Promise 方式作为异步方法。 418e41f4b71Sopenharmony_ci 419e41f4b71Sopenharmony_ci**系统接口**:此接口为系统接口。 420e41f4b71Sopenharmony_ci 421e41f4b71Sopenharmony_ci**需要权限**:ohos.permission.MANAGE_VPN 422e41f4b71Sopenharmony_ci 423e41f4b71Sopenharmony_ci**系统能力**:SystemCapability.Communication.NetManager.Vpn 424e41f4b71Sopenharmony_ci 425e41f4b71Sopenharmony_ci**返回值:** 426e41f4b71Sopenharmony_ci 427e41f4b71Sopenharmony_ci| 类型 | 说明 | 428e41f4b71Sopenharmony_ci| --------------- | ----------------------------------------------------- | 429e41f4b71Sopenharmony_ci| Promise\<void\> | 以 Promise 形式返回设定结果,失败返回错误码错误信息。 | 430e41f4b71Sopenharmony_ci 431e41f4b71Sopenharmony_ci**错误码:** 432e41f4b71Sopenharmony_ci 433e41f4b71Sopenharmony_ci以下错误码的详细介绍参见[VPN 错误码](errorcode-net-vpn.md)。 434e41f4b71Sopenharmony_ci 435e41f4b71Sopenharmony_ci| 错误码 ID | 错误信息 | 436e41f4b71Sopenharmony_ci| --------- | -------------------------------------------- | 437e41f4b71Sopenharmony_ci| 201 | Permission denied. | 438e41f4b71Sopenharmony_ci| 401 | Parameter error. | 439e41f4b71Sopenharmony_ci| 202 | Non-system applications use system APIs. | 440e41f4b71Sopenharmony_ci| 2200002 | Operation failed. Cannot connect to service. | 441e41f4b71Sopenharmony_ci| 2200003 | System internal error. | 442e41f4b71Sopenharmony_ci 443e41f4b71Sopenharmony_ci**示例:** 444e41f4b71Sopenharmony_ci 445e41f4b71Sopenharmony_ci```js 446e41f4b71Sopenharmony_ciimport { vpn } from '@kit.NetworkKit'; 447e41f4b71Sopenharmony_ciimport { common } from '@kit.AbilityKit'; 448e41f4b71Sopenharmony_ciimport { BusinessError } from '@kit.BasicServicesKit'; 449e41f4b71Sopenharmony_ci 450e41f4b71Sopenharmony_ci@Entry 451e41f4b71Sopenharmony_ci@Component 452e41f4b71Sopenharmony_cistruct Index { 453e41f4b71Sopenharmony_ci private context = getContext(this) as common.UIAbilityContext; 454e41f4b71Sopenharmony_ci private VpnConnection: vpn.VpnConnection = vpn.createVpnConnection(this.context); 455e41f4b71Sopenharmony_ci Destroy(): void { 456e41f4b71Sopenharmony_ci this.VpnConnection.destroy().then(() => { 457e41f4b71Sopenharmony_ci console.info("destroy success."); 458e41f4b71Sopenharmony_ci }).catch((err: BusinessError) => { 459e41f4b71Sopenharmony_ci console.info("destroy fail" + JSON.stringify(err)); 460e41f4b71Sopenharmony_ci }); 461e41f4b71Sopenharmony_ci } 462e41f4b71Sopenharmony_ci build() { } 463e41f4b71Sopenharmony_ci} 464e41f4b71Sopenharmony_ci``` 465e41f4b71Sopenharmony_ci 466e41f4b71Sopenharmony_ci## VpnConfig 467e41f4b71Sopenharmony_ci 468e41f4b71Sopenharmony_ciVPN 配置参数。 469e41f4b71Sopenharmony_ci 470e41f4b71Sopenharmony_ci**系统接口**:此接口为系统接口。 471e41f4b71Sopenharmony_ci 472e41f4b71Sopenharmony_ci**系统能力**:SystemCapability.Communication.NetManager.Vpn 473e41f4b71Sopenharmony_ci 474e41f4b71Sopenharmony_ci| 名称 | 类型 | 必填 | 说明 | 475e41f4b71Sopenharmony_ci| ------------------- | -------------------------------------------------------------- | ---- | ----------------------------------- | 476e41f4b71Sopenharmony_ci| addresses | Array\<[LinkAddress](js-apis-net-connection.md#linkaddress)\> | 是 | VPN 虚拟网卡的 IP 地址。 | 477e41f4b71Sopenharmony_ci| routes | Array\<[RouteInfo](js-apis-net-connection.md#routeinfo)\> | 否 | VPN 虚拟网卡的路由信息。 | 478e41f4b71Sopenharmony_ci| dnsAddresses | Array\<string\> | 否 | DNS 服务器地址信息。 | 479e41f4b71Sopenharmony_ci| searchDomains | Array\<string\> | 否 | DNS 的搜索域列表。 | 480e41f4b71Sopenharmony_ci| mtu | number | 否 | 最大传输单元 MTU 值(单位:字节)。 | 481e41f4b71Sopenharmony_ci| isIPv4Accepted | boolean | 否 | 是否支持 IPV4, 默认值为 true。 | 482e41f4b71Sopenharmony_ci| isIPv6Accepted | boolean | 否 | 是否支持 IPV6, 默认值为 flase。 | 483e41f4b71Sopenharmony_ci| isLegacy | boolean | 否 | 是否支持内置 VPN, 默认值为 flase。 | 484e41f4b71Sopenharmony_ci| isBlocking | boolean | 否 | 是否阻塞模式, 默认值为 flase。 | 485e41f4b71Sopenharmony_ci| trustedApplications | Array\<string\> | 否 | 白名单信息, string 类型表示的包名。 | 486e41f4b71Sopenharmony_ci| blockedApplications | Array\<string\> | 否 | 黑名单信息, string 类型表示的包名。 |