private void PRTdeleteclick(object sender, MouseButtonEventArgs e) { IPRTRulesManage PRTrule = new PRTRulesManage(); string devIP = (from devices in StaticGlobal.fwdev_list where devices.getDev_MAC() == StaticGlobal.firewallmac select devices).ToList <FWDeviceForm>()[0].getProtecDevIP_list()[0]; string route_type = (PRTdataGrid.SelectedItem as PRTRuleDataTable).route_type.ToString(); string ETH = (PRTdataGrid.SelectedItem as PRTRuleDataTable).ETH.ToString(); string Gateway = (PRTdataGrid.SelectedItem as PRTRuleDataTable).Gateway.ToString(); bool log = (PRTdataGrid.SelectedItem as PRTRuleDataTable).log; switch (route_type) { case "默认路由": if (PRTrule.DefaultRouteConfig(devIP, false, ETH, Gateway)) { StaticGlobal.FireWalldevices[StaticGlobal.firewallindex].getFireWallPRTRule_list().Remove((PRTdataGrid.SelectedItem as PRTRuleDataTable)); UserMessageBox.Show("提示", "规则删除成功!"); } else { UserMessageBox.Show("提示", "规则删除失败,请检查设备连接!"); } break; case "主机路由": string host_IP = (PRTdataGrid.SelectedItem as PRTRuleDataTable).host_IP.ToString(); if (PRTrule.HostRouteConfig(devIP, false, host_IP, ETH, Gateway)) { StaticGlobal.FireWalldevices[StaticGlobal.firewallindex].getFireWallPRTRule_list().Remove((PRTdataGrid.SelectedItem as PRTRuleDataTable)); UserMessageBox.Show("提示", "规则删除成功!"); } else { UserMessageBox.Show("提示", "规则删除失败,请检查设备连接!"); } break; case "网络路由": string dstIP = (PRTdataGrid.SelectedItem as PRTRuleDataTable).dstIP.ToString(); string netmask = (PRTdataGrid.SelectedItem as PRTRuleDataTable).netmask.ToString(); if (PRTrule.NetRouteConfig(devIP, false, dstIP, netmask, ETH, Gateway)) { StaticGlobal.FireWalldevices[StaticGlobal.firewallindex].getFireWallPRTRule_list().Remove((PRTdataGrid.SelectedItem as PRTRuleDataTable)); UserMessageBox.Show("提示", "规则删除成功!"); } else { UserMessageBox.Show("提示", "规则删除失败,请检查设备连接!"); } break; } }
public void PRTApplying() { Dispatcher.Invoke(new Action(() => { NewPRT.IsEnabled = false; PRTApplybutton.IsEnabled = false; PRTdataGrid.IsEnabled = false; Closebutton.IsEnabled = false; })); //找出需要删除的规则 var deleteRules = StaticGlobal.PRToldrules.Where(deleteRule => !StaticGlobal.FireWalldevices[StaticGlobal.firewallindex].getFireWallPRTRule_list().Contains(deleteRule)).ToList(); //找出需要增加的规则 var addRules = StaticGlobal.FireWalldevices[StaticGlobal.firewallindex].getFireWallPRTRule_list().Where(addRule => !StaticGlobal.PRToldrules.Contains(addRule)).ToList(); bool PRTApplyFlag = true; string dev_ip = (from devices in StaticGlobal.fwdev_list where devices.getDev_MAC() == StaticGlobal.firewallmac select devices).ToList <FWDeviceForm>()[0].getProtecDevIP_list()[0]; IPRTRulesManage prtrule = new PRTRulesManage(); //增加规则 for (int i = 0; i < addRules.Count(); i++) { string route_type = addRules[i].route_type; string ETH = addRules[i].ETH; string Gateway = addRules[i].Gateway; bool log = addRules[i].log; switch (route_type) { case "默认路由": if (prtrule.DefaultRouteConfig(dev_ip, true, ETH, Gateway)) { PRTApplyFlag = true; } else { PRTApplyFlag = false; } break; case "主机路由": string host_IP = addRules[i].host_IP.ToString(); if (prtrule.HostRouteConfig(dev_ip, true, host_IP, ETH, Gateway)) { PRTApplyFlag = true; } else { PRTApplyFlag = false; } break; case "网络路由": string dstIP = addRules[i].dstIP.ToString(); string netmask = addRules[i].netmask; if (prtrule.NetRouteConfig(dev_ip, true, dstIP, netmask, ETH, Gateway)) { PRTApplyFlag = true; } else { PRTApplyFlag = false; } break; } } //删除规则 for (int j = 0; j < deleteRules.Count(); j++) { string route_type = deleteRules[j].route_type; string ETH = deleteRules[j].ETH; string Gateway = deleteRules[j].Gateway; bool log = deleteRules[j].log; switch (route_type) { case "默认路由": if (prtrule.DefaultRouteConfig(dev_ip, false, ETH, Gateway)) { PRTApplyFlag = true; } else { PRTApplyFlag = false; } break; case "主机路由": string host_IP = deleteRules[j].host_IP.ToString(); if (prtrule.HostRouteConfig(dev_ip, false, host_IP, ETH, Gateway)) { PRTApplyFlag = true; } else { PRTApplyFlag = false; } break; case "网络路由": string dstIP = deleteRules[j].dstIP.ToString(); string netmask = deleteRules[j].netmask; if (prtrule.NetRouteConfig(dev_ip, false, dstIP, netmask, ETH, Gateway)) { PRTApplyFlag = true; } else { PRTApplyFlag = false; } break; } } Dispatcher.Invoke(new Action(() => { if (PRTApplyFlag) { UserMessageBox.Show("提示", "所有规则已成功应用!"); } else { UserMessageBox.Show("提示", "部分规则未成功应用,请检查设备之间的连接!"); } this.Close(); } )); PRTApplyThread.Abort(); }