/// <summary> /// Constructs an IPGlobalStatistics object from the snmp4 stats file. /// </summary> public static LinuxIPGlobalStatistics CreateIPv4Statistics() { LinuxIPGlobalStatistics stats = new LinuxIPGlobalStatistics(); string fileContents = File.ReadAllText(NetworkFiles.SnmpV4StatsFile); int firstIpHeader = fileContents.IndexOf("Ip:"); int secondIpHeader = fileContents.IndexOf("Ip:", firstIpHeader + 1); int endOfSecondLine = fileContents.IndexOf(Environment.NewLine, secondIpHeader); string ipData = fileContents.Substring(secondIpHeader, endOfSecondLine - secondIpHeader); StringParser parser = new StringParser(ipData, ' '); // NOTE: Need to verify that this order is consistent. Otherwise, we need to parse the first-line header // to determine the order of information contained in the file. parser.MoveNextOrFail(); // Skip Ip: // According to RFC 1213, "1" indicates "acting as a gateway". "2" indicates "NOT acting as a gateway". stats._forwarding = parser.MoveAndExtractNext() == "1"; stats._defaultTtl = parser.ParseNextInt32(); stats._inReceives = parser.ParseNextInt32(); stats._inHeaderErrors = parser.ParseNextInt32(); stats._inAddressErrors = parser.ParseNextInt32(); stats._forwardedDatagrams = parser.ParseNextInt32(); stats._inUnknownProtocols = parser.ParseNextInt32(); stats._inDiscards = parser.ParseNextInt32(); stats._inDelivers = parser.ParseNextInt32(); stats._outRequests = parser.ParseNextInt32(); stats._outDiscards = parser.ParseNextInt32(); stats._outNoRoutes = parser.ParseNextInt32(); stats._reassemblyTimeout = parser.ParseNextInt32(); stats._reassemblyRequireds = parser.ParseNextInt32(); stats._reassemblyOKs = parser.ParseNextInt32(); stats._reassemblyFails = parser.ParseNextInt32(); stats._fragmentOKs = parser.ParseNextInt32(); stats._fragmentFails = parser.ParseNextInt32(); stats._fragmentCreates = parser.ParseNextInt32(); string routeFile = ReadProcConfigFile(NetworkFiles.Ipv4RouteFile); stats._numRoutes = CountOccurences(Environment.NewLine, routeFile) - 1; // File includes one-line header stats._numInterfaces = GetNumInterfaces(); stats._numIPAddresses = GetNumIPAddresses(); return(stats); }
/// <summary> /// Constructs an IPGlobalStatistics object from the snmp4 stats file. /// </summary> public static LinuxIPGlobalStatistics CreateIPv4Statistics() { LinuxIPGlobalStatistics stats = new LinuxIPGlobalStatistics(); string fileContents = File.ReadAllText(NetworkFiles.SnmpV4StatsFile); int firstIpHeader = fileContents.IndexOf("Ip:"); int secondIpHeader = fileContents.IndexOf("Ip:", firstIpHeader + 1); int endOfSecondLine = fileContents.IndexOf(Environment.NewLine, secondIpHeader); string ipData = fileContents.Substring(secondIpHeader, endOfSecondLine - secondIpHeader); StringParser parser = new StringParser(ipData, ' '); // NOTE: Need to verify that this order is consistent. Otherwise, we need to parse the first-line header // to determine the order of information contained in the file. parser.MoveNextOrFail(); // Skip Ip: // According to RFC 1213, "1" indicates "acting as a gateway". "2" indicates "NOT acting as a gateway". stats._forwarding = parser.MoveAndExtractNext() == "1"; stats._defaultTtl = parser.ParseNextInt32(); stats._inReceives = parser.ParseNextInt32(); stats._inHeaderErrors = parser.ParseNextInt32(); stats._inAddressErrors = parser.ParseNextInt32(); stats._forwardedDatagrams = parser.ParseNextInt32(); stats._inUnknownProtocols = parser.ParseNextInt32(); stats._inDiscards = parser.ParseNextInt32(); stats._inDelivers = parser.ParseNextInt32(); stats._outRequests = parser.ParseNextInt32(); stats._outDiscards = parser.ParseNextInt32(); stats._outNoRoutes = parser.ParseNextInt32(); stats._reassemblyTimeout = parser.ParseNextInt32(); stats._reassemblyRequireds = parser.ParseNextInt32(); stats._reassemblyOKs = parser.ParseNextInt32(); stats._reassemblyFails = parser.ParseNextInt32(); stats._fragmentOKs = parser.ParseNextInt32(); stats._fragmentFails = parser.ParseNextInt32(); stats._fragmentCreates = parser.ParseNextInt32(); string routeFile = ReadProcConfigFile(NetworkFiles.Ipv4RouteFile); stats._numRoutes = CountOccurences(Environment.NewLine, routeFile) - 1; // File includes one-line header stats._numInterfaces = GetNumInterfaces(); stats._numIPAddresses = GetNumIPAddresses(); return stats; }
/// <summary> /// Constructs an IPGlobalStatistics object from the snmp6 stats file. /// </summary> public static LinuxIPGlobalStatistics CreateIPv6Statistics() { LinuxIPGlobalStatistics stats = new LinuxIPGlobalStatistics(); // /proc/sys/net/ipv6/conf/default/forwarding string path = Path.Combine(NetworkFiles.Ipv4ConfigFolder, NetworkFiles.DefaultNetworkInterfaceFileName, NetworkFiles.ForwardingFileName); stats._forwarding = int.Parse(File.ReadAllText(path)) == 1; // snmp6 does not include Default TTL info. Read it from snmp. string snmp4FileContents = File.ReadAllText(NetworkFiles.SnmpV4StatsFile); int firstIpHeader = snmp4FileContents.IndexOf("Ip:"); int secondIpHeader = snmp4FileContents.IndexOf("Ip:", firstIpHeader + 1); int endOfSecondLine = snmp4FileContents.IndexOf(Environment.NewLine, secondIpHeader); string ipData = snmp4FileContents.Substring(secondIpHeader, endOfSecondLine - secondIpHeader); StringParser parser = new StringParser(ipData, ' '); parser.MoveNextOrFail(); // Skip Ip: // According to RFC 1213, "1" indicates "acting as a gateway". "2" indicates "NOT acting as a gateway". parser.MoveNextOrFail(); // Skip forwarding stats._defaultTtl = parser.ParseNextInt32(); // Read the remainder of statistics from snmp6. string fileContents = File.ReadAllText(NetworkFiles.SnmpV6StatsFile); RowConfigReader reader = new RowConfigReader(fileContents); stats._inReceives = reader.GetNextValueAsInt32("Ip6InReceives"); stats._inHeaderErrors = reader.GetNextValueAsInt32("Ip6InHdrErrors"); stats._inAddressErrors = reader.GetNextValueAsInt32("Ip6InAddrErrors"); stats._inUnknownProtocols = reader.GetNextValueAsInt32("Ip6InUnknownProtos"); stats._inDiscards = reader.GetNextValueAsInt32("Ip6InDiscards"); stats._inDelivers = reader.GetNextValueAsInt32("Ip6InDelivers"); stats._forwardedDatagrams = reader.GetNextValueAsInt32("Ip6OutForwDatagrams"); stats._outRequests = reader.GetNextValueAsInt32("Ip6OutRequests"); stats._outDiscards = reader.GetNextValueAsInt32("Ip6OutDiscards"); stats._outNoRoutes = reader.GetNextValueAsInt32("Ip6OutNoRoutes"); stats._reassemblyTimeout = reader.GetNextValueAsInt32("Ip6ReasmTimeout"); stats._reassemblyRequireds = reader.GetNextValueAsInt32("Ip6ReasmReqds"); stats._reassemblyOKs = reader.GetNextValueAsInt32("Ip6ReasmOKs"); stats._reassemblyFails = reader.GetNextValueAsInt32("Ip6ReasmFails"); stats._fragmentOKs = reader.GetNextValueAsInt32("Ip6FragOKs"); stats._fragmentFails = reader.GetNextValueAsInt32("Ip6FragFails"); stats._fragmentCreates = reader.GetNextValueAsInt32("Ip6FragCreates"); string routeFile = ReadProcConfigFile(NetworkFiles.Ipv6RouteFile); stats._numRoutes = CountOccurences(Environment.NewLine, routeFile); int interfaceCount = 0; var files = new DirectoryInfo(NetworkFiles.Ipv6ConfigFolder).GetFiles(); foreach (var file in files) { if (file.Name != NetworkFiles.AllNetworkInterfaceFileName && file.Name != NetworkFiles.DefaultNetworkInterfaceFileName) { interfaceCount++; } } stats._numInterfaces = interfaceCount; stats._numIPAddresses = GetNumIPAddresses(); return(stats); }
/// <summary> /// Constructs an IPGlobalStatistics object from the snmp6 stats file. /// </summary> public static LinuxIPGlobalStatistics CreateIPv6Statistics() { LinuxIPGlobalStatistics stats = new LinuxIPGlobalStatistics(); // /proc/sys/net/ipv6/conf/default/forwarding string path = Path.Combine(NetworkFiles.Ipv4ConfigFolder, NetworkFiles.DefaultNetworkInterfaceFileName, NetworkFiles.ForwardingFileName); stats._forwarding = int.Parse(File.ReadAllText(path)) == 1; // snmp6 does not include Default TTL info. Read it from snmp. string snmp4FileContents = File.ReadAllText(NetworkFiles.SnmpV4StatsFile); int firstIpHeader = snmp4FileContents.IndexOf("Ip:"); int secondIpHeader = snmp4FileContents.IndexOf("Ip:", firstIpHeader + 1); int endOfSecondLine = snmp4FileContents.IndexOf(Environment.NewLine, secondIpHeader); string ipData = snmp4FileContents.Substring(secondIpHeader, endOfSecondLine - secondIpHeader); StringParser parser = new StringParser(ipData, ' '); parser.MoveNextOrFail(); // Skip Ip: // According to RFC 1213, "1" indicates "acting as a gateway". "2" indicates "NOT acting as a gateway". parser.MoveNextOrFail(); // Skip forwarding stats._defaultTtl = parser.ParseNextInt32(); // Read the remainder of statistics from snmp6. string fileContents = File.ReadAllText(NetworkFiles.SnmpV6StatsFile); RowConfigReader reader = new RowConfigReader(fileContents); stats._inReceives = reader.GetNextValueAsInt32("Ip6InReceives"); stats._inHeaderErrors = reader.GetNextValueAsInt32("Ip6InHdrErrors"); stats._inAddressErrors = reader.GetNextValueAsInt32("Ip6InAddrErrors"); stats._inUnknownProtocols = reader.GetNextValueAsInt32("Ip6InUnknownProtos"); stats._inDiscards = reader.GetNextValueAsInt32("Ip6InDiscards"); stats._inDelivers = reader.GetNextValueAsInt32("Ip6InDelivers"); stats._forwardedDatagrams = reader.GetNextValueAsInt32("Ip6OutForwDatagrams"); stats._outRequests = reader.GetNextValueAsInt32("Ip6OutRequests"); stats._outDiscards = reader.GetNextValueAsInt32("Ip6OutDiscards"); stats._outNoRoutes = reader.GetNextValueAsInt32("Ip6OutNoRoutes"); stats._reassemblyTimeout = reader.GetNextValueAsInt32("Ip6ReasmTimeout"); stats._reassemblyRequireds = reader.GetNextValueAsInt32("Ip6ReasmReqds"); stats._reassemblyOKs = reader.GetNextValueAsInt32("Ip6ReasmOKs"); stats._reassemblyFails = reader.GetNextValueAsInt32("Ip6ReasmFails"); stats._fragmentOKs = reader.GetNextValueAsInt32("Ip6FragOKs"); stats._fragmentFails = reader.GetNextValueAsInt32("Ip6FragFails"); stats._fragmentCreates = reader.GetNextValueAsInt32("Ip6FragCreates"); string routeFile = ReadProcConfigFile(NetworkFiles.Ipv6RouteFile); stats._numRoutes = CountOccurences(Environment.NewLine, routeFile); int interfaceCount = 0; var files = new DirectoryInfo(NetworkFiles.Ipv6ConfigFolder).GetFiles(); foreach (var file in files) { if (file.Name != NetworkFiles.AllNetworkInterfaceFileName && file.Name != NetworkFiles.DefaultNetworkInterfaceFileName) { interfaceCount++; } } stats._numInterfaces = interfaceCount; stats._numIPAddresses = GetNumIPAddresses(); return stats; }
public override IPGlobalStatistics GetIPv6GlobalStatistics() { return(LinuxIPGlobalStatistics.CreateIPv6Statistics()); }