Exemple #1
0
        protected override bool TryGetEndPointFor(Socket client, out EndPoint endPoint)
        {
            endPoint = null;
            try
            {
                var socks4RequestBuffer = new byte[16];
                var bytesReceived       = client.Receive(socks4RequestBuffer);
                var request             = Socks4Helper.GetRequest(socks4RequestBuffer.Take(bytesReceived).ToArray());

                var host = request.Address;
                var port = request.Port;

                var ip = IPAddress.Any;
                if (!IPAddress.TryParse(host, out ip))
                {
                    var ips = Dns.GetHostAddresses(host);
                    if (ips.Length == 0)
                    {
                        return(false);
                    }
                    ip = ips[0];
                }
                endPoint = new IPEndPoint(ip, port);
                return(true);
            }
            catch
            {
                return(false);
            }
        }
Exemple #2
0
        protected override void EndConnect(IAsyncResult e)
        {
            var sockets = e.AsyncState as Socket[];
            var client  = sockets[0];
            var server  = sockets[1];

            try
            {
                base.EndConnect(e);
                if (server.Connected)
                {
                    var response      = new Socks4Packet(Socks4ServiceCode.Accepted);
                    var responseBytes = Socks4Helper.GetResponse(response);
                    client.Send(responseBytes);
                }
            }
            catch
            {
                DisposeSocket(client);
                DisposeSocket(server);
            }
        }