Пример #1
0
        public Socket Accept()
        {
            byte[] response = new byte[262];

            if (_socket.Receive(response) < 10)
            {
                throw new SocksClientException("The connection was reset by the remote peer.");
            }

            if (response[0] != SocksClient.SOCKS_VERSION)
            {
                throw new SocksClientException("Socks version 5 is not supported by the proxy server.");
            }

            SocksReplyCode reply = (SocksReplyCode)response[1];

            if (reply != SocksReplyCode.Succeeded)
            {
                throw new SocksClientException("Socks proxy server request failed: " + reply.ToString());
            }

            _dstEP = SocksClient.ParseEndpoint(response, 3);

            return(_socket);
        }
Пример #2
0
        public int ReceiveFrom(byte[] buffer, int offset, int size, out EndPoint remoteEP)
        {
            byte[]   datagram = new byte[262 + size];
            EndPoint dummyEP  = new IPEndPoint(IPAddress.Any, 0);

            int bytesReceived = _udpSocket.ReceiveFrom(datagram, 0, datagram.Length, SocketFlags.None, ref dummyEP);

            if (bytesReceived < 10)
            {
                throw new SocksClientException("The connection was reset by the remote peer.");
            }

            remoteEP = SocksClient.ParseEndpoint(datagram, 3);

            int addressSize;

            switch (remoteEP.AddressFamily)
            {
            case AddressFamily.InterNetwork:
                addressSize = 4;
                break;

            case AddressFamily.InterNetworkV6:
                addressSize = 16;
                break;

            case AddressFamily.Unspecified:
                addressSize = 1 + (remoteEP as DomainEndPoint).Address.Length;
                break;

            default:
                throw new NotSupportedException("AddressFamily not supported.");
            }

            int dataOffset = 6 + addressSize;
            int dataSize   = bytesReceived - dataOffset;

            if (dataSize > size)
            {
                dataSize = size;
            }

            Buffer.BlockCopy(datagram, dataOffset, buffer, offset, dataSize);

            return(dataSize);
        }
Пример #3
0
        public NetProxy(NetProxyType type, string address, int port, NetworkCredential credential = null)
        {
            _type = type;

            switch (type)
            {
            case NetProxyType.Http:
                _httpProxy = new WebProxyEx(new Uri("http://" + address + ":" + port), false, new string[] { }, credential);
                break;

            case NetProxyType.Socks5:
                _socksProxy = new SocksClient(address, port, credential);
                break;

            default:
                throw new NotSupportedException("Proxy type not supported.");
            }
        }
Пример #4
0
 public NetProxy(SocksClient socksProxy)
 {
     _type       = NetProxyType.Socks5;
     _socksProxy = socksProxy;
 }