Пример #1
0
        public static List <VPNStatusXmlGateway> ParseStatistics(string xml)
        {
            var statusXml    = XDocument.Parse(xml).Root;
            var gatewayList  = statusXml.XPathSelectElement("/status/cluster/aggregate/ike/gateway/list");
            var tunnelList   = statusXml.XPathSelectElement("/status/cluster/aggregate/ipsec/sa/list");
            var counterStats = statusXml.XPathSelectElement("/status/ike/counters");

            var gateways = new List <Clearwave.Overseer.WatchGuard.VPNStatusXmlGateway>();

            foreach (var item in gatewayList.Elements("gateway"))
            {
                gateways.Add(new WatchGuard.VPNStatusXmlGateway()
                {
                    Name          = item.Element("name").Value,
                    Enabled       = item.Element("enabled").Value == "1",
                    IKEPolicyList = item.Element("ike_policy_list").Elements("ike_policy").Select(x => x.Value).ToArray(),
                });
            }
            var gatewayDictionary = gateways.ToDictionary(x => x.Name, StringComparer.InvariantCultureIgnoreCase);

            foreach (var item in tunnelList.Elements("sa_brief"))
            {
                var gateway = gatewayDictionary[item.Element("ike_policy").Value];
                var inbound = item.Element("dir").Value == "0";
                if (inbound)
                {
                    var remoteNetwork = item.Element("selector").Element("local_start").Value;  // other way around
                    var localNetwork  = item.Element("selector").Element("remote_start").Value; // other way around
                    var remoteGateway = item.Element("source").Value;

                    var tunnel = gateway.Tunnels.SingleOrDefault(x => x.RemoteNetwork == remoteNetwork && x.LocalNetwork == localNetwork);
                    if (tunnel == null)
                    {
                        tunnel               = new WatchGuard.VPNStatusXmlTunnel();
                        tunnel.IKEPolicy     = item.Element("ike_policy").Value;
                        tunnel.IPSECPolicy   = item.Element("ipsec_policy").Value;
                        tunnel.RemoteGateway = remoteGateway;
                        tunnel.LocalNetwork  = localNetwork;
                        tunnel.RemoteNetwork = remoteNetwork;
                        gateway.Tunnels.Add(tunnel);
                    }

                    //tunnel.CreatedTime = Stats.UnixTimeStampToDateTime(double.Parse(item.Element("created_time").Value));
                    tunnel.received_total_nbytes = long.Parse(item.Element("total_nbytes").Value);
                    tunnel.received_total_npkts  = long.Parse(item.Element("total_npkts").Value);
                    tunnel.total_rekeys          = int.Parse(item.Element("total_rekeys").Value);
                }
                else
                {
                    var localNetwork  = item.Element("selector").Element("local_start").Value;
                    var remoteNetwork = item.Element("selector").Element("remote_start").Value;
                    var remoteGateway = item.Element("destination").Value; // other way around

                    var tunnel = gateway.Tunnels.SingleOrDefault(x => x.RemoteNetwork == remoteNetwork && x.LocalNetwork == localNetwork);
                    if (tunnel == null)
                    {
                        tunnel               = new WatchGuard.VPNStatusXmlTunnel();
                        tunnel.IKEPolicy     = item.Element("ike_policy").Value;
                        tunnel.IPSECPolicy   = item.Element("ipsec_policy").Value;
                        tunnel.RemoteGateway = remoteGateway;
                        tunnel.LocalNetwork  = localNetwork;
                        tunnel.RemoteNetwork = remoteNetwork;
                        gateway.Tunnels.Add(tunnel);
                    }

                    //tunnel.CreatedTime = Stats.UnixTimeStampToDateTime(double.Parse(item.Element("created_time").Value));
                    tunnel.sent_total_nbytes = long.Parse(item.Element("total_nbytes").Value);
                    tunnel.sent_total_npkts  = long.Parse(item.Element("total_npkts").Value);
                    tunnel.total_rekeys      = int.Parse(item.Element("total_rekeys").Value);
                }
            }

            return(gateways);
        }
Пример #2
0
        public static List<VPNStatusXmlGateway> ParseStatistics(string xml)
        {
            var statusXml = XDocument.Parse(xml).Root;
            var gatewayList = statusXml.XPathSelectElement("/status/cluster/aggregate/ike/gateway/list");
            var tunnelList = statusXml.XPathSelectElement("/status/cluster/aggregate/ipsec/sa/list");
            var counterStats = statusXml.XPathSelectElement("/status/ike/counters");

            var gateways = new List<Clearwave.Overseer.WatchGuard.VPNStatusXmlGateway>();
            foreach (var item in gatewayList.Elements("gateway"))
            {
                gateways.Add(new WatchGuard.VPNStatusXmlGateway()
                {
                    Name = item.Element("name").Value,
                    Enabled = item.Element("enabled").Value == "1",
                    IKEPolicyList = item.Element("ike_policy_list").Elements("ike_policy").Select(x => x.Value).ToArray(),
                });
            }
            var gatewayDictionary = gateways.ToDictionary(x => x.Name, StringComparer.InvariantCultureIgnoreCase);
            foreach (var item in tunnelList.Elements("sa_brief"))
            {
                var gateway = gatewayDictionary[item.Element("ike_policy").Value];
                var inbound = item.Element("dir").Value == "0";
                if (inbound)
                {
                    var remoteNetwork = item.Element("selector").Element("local_start").Value; // other way around
                    var localNetwork = item.Element("selector").Element("remote_start").Value; // other way around
                    var remoteGateway = item.Element("source").Value;

                    var tunnel = gateway.Tunnels.SingleOrDefault(x => x.RemoteNetwork == remoteNetwork && x.LocalNetwork == localNetwork);
                    if (tunnel == null)
                    {
                        tunnel = new WatchGuard.VPNStatusXmlTunnel();
                        tunnel.IKEPolicy = item.Element("ike_policy").Value;
                        tunnel.IPSECPolicy = item.Element("ipsec_policy").Value;
                        tunnel.RemoteGateway = remoteGateway;
                        tunnel.LocalNetwork = localNetwork;
                        tunnel.RemoteNetwork = remoteNetwork;
                        gateway.Tunnels.Add(tunnel);
                    }

                    //tunnel.CreatedTime = Stats.UnixTimeStampToDateTime(double.Parse(item.Element("created_time").Value));
                    tunnel.received_total_nbytes = long.Parse(item.Element("total_nbytes").Value);
                    tunnel.received_total_npkts = long.Parse(item.Element("total_npkts").Value);
                    tunnel.total_rekeys = int.Parse(item.Element("total_rekeys").Value);
                }
                else
                {
                    var localNetwork = item.Element("selector").Element("local_start").Value;
                    var remoteNetwork = item.Element("selector").Element("remote_start").Value;
                    var remoteGateway = item.Element("destination").Value; // other way around

                    var tunnel = gateway.Tunnels.SingleOrDefault(x => x.RemoteNetwork == remoteNetwork && x.LocalNetwork == localNetwork);
                    if (tunnel == null)
                    {
                        tunnel = new WatchGuard.VPNStatusXmlTunnel();
                        tunnel.IKEPolicy = item.Element("ike_policy").Value;
                        tunnel.IPSECPolicy = item.Element("ipsec_policy").Value;
                        tunnel.RemoteGateway = remoteGateway;
                        tunnel.LocalNetwork = localNetwork;
                        tunnel.RemoteNetwork = remoteNetwork;
                        gateway.Tunnels.Add(tunnel);
                    }

                    //tunnel.CreatedTime = Stats.UnixTimeStampToDateTime(double.Parse(item.Element("created_time").Value));
                    tunnel.sent_total_nbytes = long.Parse(item.Element("total_nbytes").Value);
                    tunnel.sent_total_npkts = long.Parse(item.Element("total_npkts").Value);
                    tunnel.total_rekeys = int.Parse(item.Element("total_rekeys").Value);
                }
            }

            return gateways;
        }