public static SocksError SendRequest(Client cli, SocksEncryption enc, string ipOrDomain, int port) { AddressType type; IPAddress ipAddress; if (!IPAddress.TryParse(ipOrDomain, out ipAddress)) { //it's a domain. :D (hopefully). type = AddressType.Domain; } else { type = AddressType.IP; } SocksRequest sr = new SocksRequest(StreamTypes.Stream, type, ipOrDomain, port); //send data. byte[] p = sr.GetData(false); p[1] = 0x01; //process data. cli.Send(enc.ProcessOutputData(p, 0, p.Length)); byte[] buffer = new byte[512]; //process input data. int recv = cli.Receive(buffer, 0, buffer.Length); if (recv == -1) { return(SocksError.Failure); } byte[] buff = enc.ProcessInputData(buffer, 0, recv); return((SocksError)buff[1]); }
public void Start() { if (ModifiedReq.Address == null || ModifiedReq.Port <= -1) { Client.Client.Disconnect(); return; } #if DEBUG Console.WriteLine("{0}:{1}", ModifiedReq.Address, ModifiedReq.Port); #endif foreach (ConnectSocketOverrideHandler conn in PluginLoader.LoadPlugin(typeof(ConnectSocketOverrideHandler))) { if (conn.Enabled) { Client pm = conn.OnConnectOverride(ModifiedReq); if (pm != null) { //check if it's connected. if (pm.Sock.Connected) { RemoteClient = pm; //send request right here. byte[] shit = Req.GetData(true); shit[1] = 0x00; //process packet. byte[] output = se.ProcessOutputData(shit, 0, shit.Length); //gucci let's go. Client.Client.Send(output); ConnectHandler(null); return; } } } } var socketArgs = new SocketAsyncEventArgs { RemoteEndPoint = new IPEndPoint(ModifiedReq.IP, ModifiedReq.Port) }; socketArgs.Completed += socketArgs_Completed; RemoteClient.Sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); if (!RemoteClient.Sock.ConnectAsync(socketArgs)) { ConnectHandler(socketArgs); } }