private static unsafe GatewayIPAddressInformationCollection GetGatewayAddresses(int interfaceIndex) { HashSet<IPAddress> addressSet = new HashSet<IPAddress>(); if (Interop.Sys.EnumerateGatewayAddressesForInterface((uint)interfaceIndex, (gatewayAddressInfo) => { byte[] ipBytes = new byte[gatewayAddressInfo->NumAddressBytes]; fixed (byte* ipArrayPtr = ipBytes) { Buffer.MemoryCopy(gatewayAddressInfo->AddressBytes, ipArrayPtr, ipBytes.Length, ipBytes.Length); } IPAddress ipAddress = new IPAddress(ipBytes); addressSet.Add(ipAddress); }) == -1) { throw new NetworkInformationException(SR.net_PInvokeError); } GatewayIPAddressInformationCollection collection = new GatewayIPAddressInformationCollection(); foreach (IPAddress address in addressSet) { collection.InternalAdd(new SimpleGatewayIPAddressInformation(address)); } return collection; }
internal static GatewayIPAddressInformationCollection ToGatewayIpAddressInformationCollection(IPAddressCollection addresses) { GatewayIPAddressInformationCollection gatewayList = new GatewayIPAddressInformationCollection(); foreach (IPAddress address in addresses) { gatewayList.InternalAdd(new SystemGatewayIPAddressInformation(address)); } return gatewayList; }
internal GatewayIPAddressInformationCollection ToIPGatewayAddressCollection() { IpAddrString str = this; GatewayIPAddressInformationCollection informations = new GatewayIPAddressInformationCollection(); if (str.IpAddress.Length != 0) { informations.InternalAdd(new SystemGatewayIPAddressInformation(IPAddress.Parse(str.IpAddress))); } while (str.Next != IntPtr.Zero) { str = (IpAddrString) Marshal.PtrToStructure(str.Next, typeof(IpAddrString)); if (str.IpAddress.Length != 0) { informations.InternalAdd(new SystemGatewayIPAddressInformation(IPAddress.Parse(str.IpAddress))); } } return informations; }
internal static GatewayIPAddressInformationCollection ToGatewayIpAddressInformationCollection(IPAddressCollection addresses) { GatewayIPAddressInformationCollection gatewayList = new GatewayIPAddressInformationCollection(); foreach (IPAddress address in addresses) { gatewayList.InternalAdd(new SystemGatewayIPAddressInformation(address)); } return(gatewayList); }
static void AddSubsequently (IntPtr head, GatewayIPAddressInformationCollection col) { Win32_IP_ADDR_STRING a; for (IntPtr p = head; p != IntPtr.Zero; p = a.Next) { a = (Win32_IP_ADDR_STRING) Marshal.PtrToStructure (p, typeof (Win32_IP_ADDR_STRING)); col.InternalAdd (new SystemGatewayIPAddressInformation (IPAddress.Parse (a.IpAddress))); } }
// /proc/net/route contains some information about gateway addresses, // and seperates the information about by each interface. public GatewayIPAddressInformationCollection GetGatewayAddresses() { GatewayIPAddressInformationCollection collection = new GatewayIPAddressInformationCollection(); // Columns are as follows (first-line header): // Iface Destination Gateway Flags RefCnt Use Metric Mask MTU Window IRTT string[] fileLines = File.ReadAllLines(NetworkFiles.Ipv4RouteFile); foreach (string line in fileLines) { if (line.StartsWith(_linuxNetworkInterface.Name)) { StringParser parser = new StringParser(line, '\t', skipEmpty: true); parser.MoveNext(); parser.MoveNextOrFail(); string gatewayIPHex = parser.MoveAndExtractNext(); long addressValue = Convert.ToInt64(gatewayIPHex, 16); IPAddress address = new IPAddress(addressValue); collection.InternalAdd(new SimpleGatewayIPAddressInformation(address)); } } return collection; }