Exemple #1
0
        static string GetSubnet(string sIP, string sDC)
        {
            IntPtr pSiteNames;
            IntPtr pSubnetNames;

            SOCKET_ADDRESS[] SocketAddresses = new SOCKET_ADDRESS[1];

            String[] ipArray = sIP.Split('.');

            if (ipArray.Length < 4)
            {
                return(null);
            }

            SockAddr_In sockAddr;

            sockAddr.sin_family = 2;
            sockAddr.sin_port   = 0;
            sockAddr.sin_addr   = new byte[4] {
                byte.Parse(ipArray[0]), byte.Parse(ipArray[1]), byte.Parse(ipArray[2]), byte.Parse(ipArray[3])
            };
            sockAddr.sin_zero = new byte[8] {
                0, 0, 0, 0, 0, 0, 0, 0
            };

            SocketAddresses[0].iSockaddrLength = Marshal.SizeOf(sockAddr);

            IntPtr pSockAddr = Marshal.AllocHGlobal(16);

            Marshal.StructureToPtr(sockAddr, pSockAddr, true);
            SocketAddresses[0].lpSockaddr = pSockAddr;

            if (DsAddressToSiteNamesEx(
                    sDC,
                    1,//EntryCount
                    SocketAddresses,
                    out pSiteNames,
                    out pSubnetNames) == ERROR_SUCCESS)
            {
                string sSite   = Marshal.PtrToStringAuto(Marshal.ReadIntPtr(pSiteNames, 0));
                string sSubnet = Marshal.PtrToStringAuto(Marshal.ReadIntPtr(pSubnetNames, 0));

                NetApiBufferFree(pSubnetNames);
                NetApiBufferFree(pSiteNames);
                Console.WriteLine("[GetSubnet] Subnet found: " + sSubnet);
                Console.WriteLine("[GetSubnet] Site found: " + sSite);
                return(sSubnet);
            }
            else
            {
                Console.WriteLine("[GetSubnet] No subnet found!");
                return(null);
            }
        }
Exemple #2
0
        public static System.Net.IPAddress Convert(this SOCKET_ADDRESS sockAddr)
        {
            switch ((ADDRESS_FAMILY)Marshal.ReadInt16(sockAddr.lpSockAddr))
            {
            case ADDRESS_FAMILY.AF_INET:
                return(new System.Net.IPAddress((long)sockAddr.lpSockAddr.ToStructure <SOCKADDR_IN>().sin_addr));

            case ADDRESS_FAMILY.AF_INET6:
                return(new System.Net.IPAddress(sockAddr.lpSockAddr.ToStructure <SOCKADDR_IN6>().sin6_addr));

            default:
                throw new Exception("Non-IP address family");
            }
        }