public NetworkReachability(IPAddress localAddress, IPAddress remoteAddress)
        {
            if (localAddress == null && remoteAddress == null)
            {
                throw new ArgumentException("At least one address is required");
            }

            if (localAddress == null)
            {
                var remote = new sockaddr_in(remoteAddress);

                handle = SCNetworkReachabilityCreateWithAddressPair(IntPtr.Zero, IntPtr.Zero, ref remote);
            }
            else if (remoteAddress == null)
            {
                var local = new sockaddr_in(localAddress);

                handle = SCNetworkReachabilityCreateWithAddressPair(IntPtr.Zero, ref local, IntPtr.Zero);
            }
            else
            {
                var local  = new sockaddr_in(localAddress);
                var remote = new sockaddr_in(remoteAddress);

                handle = SCNetworkReachabilityCreateWithAddressPair(IntPtr.Zero, ref local, ref remote);
            }

            if (handle == IntPtr.Zero)
            {
                throw SystemConfigurationException.FromMostRecentCall();
            }
        }
        public NetworkReachability(string address)
        {
            if (address == null)
            {
                throw new ArgumentNullException("address");
            }

            handle = SCNetworkReachabilityCreateWithName(IntPtr.Zero, address);
            if (handle == IntPtr.Zero)
            {
                throw SystemConfigurationException.FromMostRecentCall();
            }
        }
        public NetworkReachability(IPAddress ip)
        {
            if (ip == null)
            {
                throw new ArgumentNullException("ip");
            }

            var s = new sockaddr_in(ip);

            handle = SCNetworkReachabilityCreateWithAddress(IntPtr.Zero, ref s);
            if (handle == IntPtr.Zero)
            {
                throw SystemConfigurationException.FromMostRecentCall();
            }
        }