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 类型表示的包名。  |