为了保证应用的运行效率,所有API调用都是异步的,对于异步调用的API均提供了Promise的方式,以下示例均采用Promise方式,更多方式可以查阅@ohos.net.netFirewall (网络防火墙)。
网络防火墙提供如下功能:
为了保证应用的运行效率,所有API调用都是异步的,对于异步调用的API均提供了Promise的方式,以下示例均采用Promise方式,更多方式可以查阅@ohos.net.netFirewall (网络防火墙)。
防火墙的典型场景有:
以下分别介绍具体开发方式。
设备通过硬件接口,插入网线。
从@kit.NetworkKit中导入netfirewall命名空间。
// 从@kit.NetworkKit中导入netFirewall命名空间。
import { netFirewall } from '@kit.NetworkKit';
import { BusinessError } from '@kit.BasicServicesKit';
import { hilog } from '@kit.PerformanceAnalysisKit';用户调用setNetFirewallPolicy方法,打开防火墙。
// IP类型
interface IpType{
family:number;
type:number;
address?:string;
mask?:number;
startIp?:string;
endIp?:string;
}
// IP端口
interface IpPort{
startPort:number;
endPort:number;
}
// ...
// 定义防火墙策略:打开,入站阻止,出站允许。
let policy: netFirewall.NetFirewallPolicy = {
isOpen: true,
inAction: netFirewall.FirewallRuleAction.RULE_DENY,
outAction: netFirewall.FirewallRuleAction.RULE_ALLOW
};
// 给用户100设置防火墙策略。
netFirewall.setNetFirewallPolicy(100, policy).then(() => {
hilog.info(0x0000, 'testTag', `set firewall policy success.`);
}).catch((error : BusinessError) => {
hilog.error(0x0000, 'testTag', `error: set firewall policy failed: ${JSON.stringify(error)}`);
});用户通过addNetFirewallRule方法,添加防火墙规则。
// 初始化具体的防火墙ip类型规则。
let ipRule: netFirewall.NetFirewallRule = {
name: 'rule1',
description: 'rule1 description',
direction: netFirewall.NetFirewallRuleDirection.RULE_IN,
action: netFirewall.FirewallRuleAction.RULE_DENY,
type: netFirewall.NetFirewallRuleType.RULE_IP,
isEnabled: true,
appUid: 20001,
localIps: [
{
family: 1,
type: 1,
address: '10.10.1.1',
mask: 32
},{
family: 1,
type: 2,
startIp: '10.20.1.1',
endIp: '10.20.1.10'
}] as IpType[],
remoteIps:[
{
family: 1,
type: 1,
address: '20.10.1.1',
mask: 32
},{
family: 1,
type: 2,
startIp: '20.20.1.1',
endIp: '20.20.1.10'
}] as IpType[],
protocol: 6,
localPorts: [
{
startPort: 1000,
endPort: 1000
},{
startPort: 2000,
endPort: 2001
}] as IpPort[],
remotePorts: [
{
startPort: 443,
endPort: 443
}] as IpPort[],
userId: 100,
interface:'wlan0' // 从API版本26.0.0开始支持
};
// 添加防火墙规则。
netFirewall.addNetFirewallRule(ipRule).then((result: number) => {
// ...
hilog.info(0x0000, 'testTag', `rule Id: ${result}`);
}, (reason: BusinessError) => {
// ...
hilog.error(0x0000, 'testTag', `error: add firewall rule failed: ${JSON.stringify(reason)}`);
});设备通过硬件接口,插入网线。
从@kit.NetworkKit中导入netFirewall命名空间。
// 从@kit.NetworkKit中导入netFirewall命名空间。
import { netFirewall } from '@kit.NetworkKit';
import { BusinessError } from '@kit.BasicServicesKit';
import { hilog } from '@kit.PerformanceAnalysisKit';调用setNetFirewallPolicy方法,打开防火墙。
interface domain{
isWildcard: boolean;
domain: string;
}
// ...
// 定义防火墙策略:打开,入站阻止,出站允许。
let policy: netFirewall.NetFirewallPolicy = {
isOpen: true,
inAction: netFirewall.FirewallRuleAction.RULE_DENY,
outAction: netFirewall.FirewallRuleAction.RULE_ALLOW
};
// 给用户100设置防火墙策略
netFirewall.setNetFirewallPolicy(100, policy).then(() => {
hilog.info(0x0000, 'testTag', `set firewall policy success.`);
}).catch((error : BusinessError) => {
hilog.error(0x0000, 'testTag', `error: set firewall policy failed: ${JSON.stringify(error)}`);
});通过addNetFirewallRule方法,添加防火墙规则。
// 初始化具体的防火墙域名类型规则。
let domainRule: netFirewall.NetFirewallRule = {
name: 'rule2',
description: 'rule2 description',
direction: netFirewall.NetFirewallRuleDirection.RULE_IN,
action: netFirewall.FirewallRuleAction.RULE_DENY,
type: netFirewall.NetFirewallRuleType.RULE_DOMAIN,
isEnabled: true,
appUid: 20002,
domains: [
{
isWildcard: false,
domain: 'www.HarmonyOS.cn'
},{
isWildcard: true,
domain: '*.HarmonyOS.cn'
},{
isWildcard: true,
domain: '*w.HarmonyOS.cn' // 从API版本26.0.0开始支持
},{
isWildcard: true,
domain: 'www.HarmonyOS.*' // 从API版本26.0.0开始支持
},{
isWildcard: true,
domain: 'www.HarmonyOS.c*' // 从API版本26.0.0开始支持
}] as domain[],
userId: 100,
interface:'wlan0' // 从API版本26.0.0开始支持
};
// 添加防火墙规则。
netFirewall.addNetFirewallRule(domainRule).then((result: number) => {
// ...
hilog.info(0x0000, 'testTag', `rule Id: ${result}`);
}, (reason: BusinessError) => {
// ...
hilog.error(0x0000, 'testTag', `error: add firewall rule failed: ${JSON.stringify(reason)}`);
});