Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 3
0
        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)));
            }
        }
Ejemplo n.º 4
0
        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);
        }
Ejemplo n.º 5
0
        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);
        }