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); }
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))); } }
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); }
private static unsafe GatewayIPAddressInformationCollection GetGatewayAddresses(int interfaceIndex) { Context context; context._interfaceIndex = interfaceIndex; context._addressSet = new HashSet <IPAddress>(); if (Interop.Sys.EnumerateGatewayAddressesForInterface(Unsafe.AsPointer(ref context), (uint)interfaceIndex, &OnGatewayFound) == -1) { throw new NetworkInformationException(SR.net_PInvokeError); } GatewayIPAddressInformationCollection collection = new GatewayIPAddressInformationCollection(); foreach (IPAddress address in context._addressSet) { collection.InternalAdd(new SimpleGatewayIPAddressInformation(address)); } return(collection); }
// /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); }