private void HandleClientComm(object client) { TcpClient tcpClient = (TcpClient)client; NetworkStream clientStream = tcpClient.GetStream(); allConnections.Add(clientStream); byte[] message = new byte[4096]; int bytesRead; string IP = ((Socket)clientStream.GetType().GetProperty("Socket", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance).GetValue(clientStream, null)).RemoteEndPoint.ToString(); sendMessage(clientStream, "/Connected"); cmdHandler = new CommandHandler(console, this, clientStream); while (loop) { bytesRead = 0; try { //waits for a message bytesRead = clientStream.Read(message, 0, 4096); } catch (Exception e) { //error occured console.writeLine(e.ToString()); } if (bytesRead == 0) { //client has left server console.writeLine(IP + " Has left the server"); break; } //message has been recieved ASCIIEncoding encoder = new ASCIIEncoding(); string msg = encoder.GetString(message, 0, bytesRead); if (msg.Contains("/")) { cmdHandler.cmd(msg); } else { console.writeLine(IP + ": " + encoder.GetString(message, 0, bytesRead)); broadcastMessage(IP + ": " + msg); } } //close client tcpClient.Close(); clientStream.Close(); }
public static Socket GetNetworkSocket(HttpServer.IHttpResponse response) { NetworkStream stream = GetNetworkStream(response); // internal ReusableSocketNetworkStream if (stream != null) { var f = stream.GetType().GetProperty("Socket", BindingFlags.Instance | BindingFlags.NonPublic); return(f.GetValue(stream, null) as Socket); } return(null); }
public String GetOriginIP() { var pi = netStream.GetType().GetProperty("Socket", BindingFlags.NonPublic | BindingFlags.Instance); var socketIp = ((Socket)pi.GetValue(netStream, null)).RemoteEndPoint.ToString(); int index = socketIp.IndexOf(":"); if (index > 0) { socketIp = socketIp.Substring(0, index); } return(socketIp); }
private static void ProcessClientRequests(object argument) { TcpClient client = (TcpClient)argument; try { StreamReader sr = new StreamReader(client.GetStream()); StreamWriter sw = new StreamWriter(client.GetStream()); NetworkStream stream = client.GetStream(); byte[] buffer = new byte[1024]; stream.Read(buffer, 0, buffer.Length); int recv = 0; foreach (byte b in buffer) { if (b != 0) { recv++; } } string request = Encoding.ASCII.GetString(buffer, 0, recv); Console.WriteLine("request received: " + request); byte[] asciiBytes = Encoding.ASCII.GetBytes(request); int asciiBytesSum = 0; foreach (byte b in asciiBytes) { asciiBytesSum = asciiBytesSum + b; } string answer = String.Join("+", asciiBytes) + "=" + asciiBytesSum.ToString(); sw.WriteLine(answer); var pi = stream.GetType().GetProperty("Socket", BindingFlags.NonPublic | BindingFlags.Instance); var socketIp = ((Socket)pi.GetValue(stream, null)).RemoteEndPoint.ToString(); Log.Information(socketIp + " " + request + " " + answer); sw.Flush(); sr.Close(); sw.Close(); client.Close(); } catch (IOException) { Console.WriteLine("Problem with client communication. Exiting thread"); } finally { if (client != null) { client.Close(); } } }
private static void ThreadProc(object obj) { var client = (TcpClient)obj; NetworkStream stream = client.GetStream(); var pi = stream.GetType().GetProperty("Socket", BindingFlags.NonPublic | BindingFlags.Instance); var socketIp = ((Socket)pi.GetValue(stream, null)).RemoteEndPoint.ToString(); Console.WriteLine(socketIp); broadcast("New user connected from: " + socketIp); int nbOfData = 0; String name = "Un utilisateur"; broadcast(name + " a rejoint le tchat..."); for (;;) { Byte[] data = new Byte[256]; String responseData = String.Empty; Int32 bytes = stream.Read(data, 0, data.Length); responseData = System.Text.Encoding.ASCII.GetString(data, 0, bytes); if (nbOfData == 0) { name = responseData; } else { String res = name + ": " + responseData; broadcast(res); } if (responseData == "quit") { break; } nbOfData++; } broadcast(name + " a quitté le tchat..."); stream.Close(); client.Close(); }
private void ConnectCallback(IAsyncResult result) { if (!active) { return; } // Send connected event. Connected(this, new EventArgs()); try { stream = tcpClient.GetStream(); // Get the local and remote endpoints from the stream. PropertyInfo socket = stream.GetType().GetProperty("Socket", BindingFlags.NonPublic | BindingFlags.Instance); RemoteEP = (IPEndPoint)((Socket)socket.GetValue(stream, null)).RemoteEndPoint; LocalEP = (IPEndPoint)((Socket)socket.GetValue(stream, null)).LocalEndPoint; // Send Telnet handshake byte[] telnet = { 255, 251, 1, // Telnet (IAC)(Will)(ECHO) - Will Echo 255, 251, 3 }; // Telnet (IAC)(Will)(SGA) - Will Supress Go Ahead stream.Write(telnet, 0, telnet.Length); ///stream.ReadTimeout = 500; //NetworkStream networkStream = tcpClient.GetStream(); byte[] buffer = new byte[tcpClient.ReceiveBufferSize]; stream.BeginRead(buffer, 0, buffer.Length, ReadCallback, buffer); } catch (Exception ex) { Debug.Write(ex.Message); } while (active) { if (!tcpClient.Client.Poll(0, SelectMode.SelectWrite)) { active = false; Disconnected(this, new EventArgs()); } } }
private void openConnection(TcpListener listener) { TcpClient client = listener.AcceptTcpClient(); client.ReceiveBufferSize = NetworkBuffer.receiveSendBufferSize; NetworkStream nwStream = client.GetStream(); var sc = nwStream.GetType().GetProperty("Socket", BindingFlags.Instance | BindingFlags.NonPublic); var socketIp = ((Socket)sc.GetValue(nwStream, null)).RemoteEndPoint.ToString(); Console.WriteLine("@@@" + socketIp); if (clients.ContainsKey(socketIp)) { } else { ClCruncherServerThread cst = new ClCruncherServerThread(listener, client, socketIp, this); clients.Add(socketIp, cst); } }
void StartServerFunc() { try { server.Start(); // 클라이언트 요청 수신 대기 while (true) { Debug.Log("Waiting for a connection..."); TcpClient client = server.AcceptTcpClient(); Debug.Log("Connected!"); data = null; NetworkStream stream = client.GetStream(); int i; while ((i = stream.Read(bytes, 0, bytes.Length)) != 0) { //data = System.Text.Encoding.ASCII.GetString(bytes, 0, i); data = System.Text.Encoding.UTF8.GetString(bytes, 0, i); Debug.Log("Received : " + data); Debug.Log("stream : " + stream.GetType().Name); //byte[] msg = System.Text.Encoding.ASCII.GetBytes(data); byte[] msg = System.Text.Encoding.UTF8.GetBytes(data); stream.Write(msg, 0, msg.Length); Debug.Log("Sent : " + data); } client.Close(); } } catch (SocketException e) { Debug.Log("SocketException : " + e); } finally { server.Stop(); } }
private void HandleDatagramReceived(IAsyncResult ar) { if (!tcpClient.Connected) { return; } NetworkStream stream = tcpClient.GetStream(); Socket socket = (Socket)stream.GetType().GetProperty("Socket", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(stream, null);; int numberOfReadBytes = 0; try { numberOfReadBytes = stream.EndRead(ar); } catch { numberOfReadBytes = 0; } if (!socket.Connected || numberOfReadBytes == 0) { // connection has been closed Close(); return; } // received byte and trigger event notification buffer = (byte[])ar.AsyncState; if (receivedBytes.Length != numberOfReadBytes) { receivedBytes = new byte[numberOfReadBytes]; } Buffer.BlockCopy(buffer, 0, receivedBytes, 0, numberOfReadBytes); RaiseDatagramReceived(tcpClient, receivedBytes); RaisePlaintextReceived(tcpClient, receivedBytes); // then start reading from the network again stream.BeginRead( buffer, 0, buffer.Length, HandleDatagramReceived, buffer); }
public static TcpClient ProxyTcpClient(string targetHost, int targetPort, string httpProxyHost, int httpProxyPort) { try { const BindingFlags Flags = BindingFlags.NonPublic | BindingFlags.Instance; Uri proxyUri = new UriBuilder { Scheme = Uri.UriSchemeHttp, Host = httpProxyHost, Port = httpProxyPort }.Uri; Uri targetUri = new UriBuilder { Scheme = Uri.UriSchemeHttp, Host = targetHost, Port = targetPort }.Uri; WebProxy webProxy = new WebProxy(proxyUri, true); WebRequest request = WebRequest.Create(targetUri); request.Proxy = webProxy; request.Method = "CONNECT"; HttpWebResponse response = (HttpWebResponse)request.GetResponse(); Stream responseStream = response.GetResponseStream(); Type responseType = responseStream.GetType(); PropertyInfo connectionProperty = responseType.GetProperty("Connection", Flags); var connection = connectionProperty.GetValue(responseStream, null); Type connectionType = connection.GetType(); PropertyInfo networkStreamProperty = connectionType.GetProperty("NetworkStream", Flags); NetworkStream networkStream = (NetworkStream)networkStreamProperty.GetValue(connection, null); Type nsType = networkStream.GetType(); PropertyInfo socketProperty = nsType.GetProperty("Socket", Flags); Socket socket = (Socket)socketProperty.GetValue(networkStream, null); return(new TcpClient { Client = socket }); } catch (Exception ex) { return(null); } }
private async void Initialize() { if (tcpClient.Connected) { // Get the underlying stream from the client. //using (stream = tcpClient.GetStream()) stream = tcpClient.GetStream(); byte[] buffer = new byte[tcpClient.ReceiveBufferSize]; //int bytes; // Get the local and remote endpoints from the stream. PropertyInfo socket = stream.GetType().GetProperty("Socket", BindingFlags.NonPublic | BindingFlags.Instance); RemoteEP = (IPEndPoint)((Socket)socket.GetValue(stream, null)).RemoteEndPoint; LocalEP = (IPEndPoint)((Socket)socket.GetValue(stream, null)).LocalEndPoint; // Start reverse DNS lookup using an asynchronous task. Task <IPHostEntry> rdnsTask = Dns.GetHostEntryAsync(IPAddress.Parse(RemoteEP.Address.ToString())); // Send ASCII FF + BS and ANSI Clear Screen //Write("\u000c\u0008\u001B[2J\r"); // Send Telnet and ANSI handshake byte[] telnet = { 12, 5, // ASCII FF + ENQ 27, 91, 62, 112, // ANSI Clear Screen 255, 251, 1, // Telnet (IAC)(Will)(ECHO) - Will Echo 255, 251, 3, // Telnet (IAC)(Will)(SGA) - Will Supress Go Ahead 255, 251, 31, // Telnet (IAC)(Will)(NAWS) - Will Negotiate About Window Size 27, 91, 54, 110 }; // ANSI (ESC)[6n - Request Cursor Position stream.Write(telnet, 0, telnet.Length); // Send Initializing //Write("TWX Proxy 3" + "\r\n\u001B[0;32m Initializing..."); Write("\rInitializing..."); await Task.Delay(200); try { // Read the response. stream.ReadTimeout = 500; stream.Read(buffer, 0, 1024); string response = Encoding.UTF8.GetString(buffer); // Check if response contains an ANSI excape sequence. // ansiDetected = Encoding.UTF8.GetString(readBuffer).Contains("\u001B["); ansiDetected = Regex.IsMatch(response, "\\x1b[[0-9;]*R"); if (buffer.Take(6).SequenceEqual(new byte[] { 255, 253, 200, 255, 253, 200 })) { Terminal = "Swath"; // Swath sends (IAC)(DO)(200) response twice on initial connection. // This response is invalid since options 141 - 254 are Unassigned } else { Terminal = ""; foreach (char c in response) { if (c == 27) { break; } if (c > 63 && c < 128) { Terminal += c; } } } } catch (Exception) { // TODO: Log ANSI detection error. } // TODO: skip ReverseDNS if localhost or local interface // Get the reverse DNS result. //await Task.Delay(2000); ReverseDNS = "UNKNOWN"; try { rdnsTask.Wait(); ReverseDNS = rdnsTask.Result.HostName; } catch (Exception) { // TODO: Log reverse DNS error. } // Send initialized event. Initialized(this, new EventArgs()); // stream.BeginRead(buffer, 0, buffer.Length, ReadCallback, buffer); } }
/* * starts the listerner */ public void startInternal(String username, String token, String host) { Mysql x = new Mysql(0, m_writer); // set initial state m_state = State.NOT_CONNECTED; // start socket and wait for incoming client connection // add here multi client stuff m_socket.Start(); TcpClient client = m_socket.AcceptTcpClient(); NetworkStream ns = client.GetStream(); StreamWriter sw = new StreamWriter(ns); sw.AutoFlush = true; if (!ns.CanRead) { Console.WriteLine("Info: Stream no readable...."); return; } var pi = ns.GetType().GetProperty("Socket", BindingFlags.NonPublic | BindingFlags.Instance); var socketIP = ((Socket)pi.GetValue(ns, null)).RemoteEndPoint.ToString(); Console.WriteLine("Connecting client: " + socketIP); // send the server greeting (static for now) handleNotConnected(x, ns, client); ns = client.GetStream(); while (socketCheck(ns)) { Console.WriteLine("Info: Read " + readBytes + " bytes...."); // if not connected, do a straight forward "send a greeting packet" if (m_state == State.NOT_CONNECTED) { Console.WriteLine("Info: Mysqlpot in state NOT CONNECTED, not possible state, error"); } else if (m_state == State.GREETING_PACKET_SEND) { Console.WriteLine("Info: Mysqlpot in state GREETING_PACKET_SEND"); x.handleLoginPacket(data, socketIP, token, username, host); m_state = State.LOGIN_OK; Console.WriteLine("Info: Login packet retrieved, now trying to generate answer packet..."); byte[] okPacket = x.generateOKPacket(x.getPacketNumber(data) + 1, 1); // packetnumber, affeceted lines Console.WriteLine("Info: Now writing OK packet back on the line.."); sw.Write(System.Text.Encoding.UTF8.GetString(okPacket).ToCharArray()); ns = client.GetStream(); } else if (m_state == State.LOGIN_OK) { Console.WriteLine("Info: Mysqlpot in state LOGIN_OK"); byte[] queryString = x.handleQueryPacket(data, socketIP, token, username, host); byte[] answer = x.getAnswerPacket(queryString, x.getPacketNumber(data) + 1); if (answer != null) { ns.Write(answer, 0, answer.Length); // sw.Write (System.Text.Encoding.UTF8.GetString(answer).ToCharArray()); ns = client.GetStream(); } else { Console.WriteLine("Info: Detected no suitable answer for the SQL query"); } } else { Console.WriteLine("Info: Mysqlpot in unknown state"); break; } } Console.WriteLine("Error: Ausbruch aus dem while loop"); ns.Close(); client.Close(); m_socket.Stop(); m_state = State.NOT_CONNECTED; } // start()
private async void Initialize() { byte[] readBuffer = new byte[4096]; // Get the local and remote endpoints from the stream. PropertyInfo socket = stream.GetType().GetProperty("Socket", BindingFlags.NonPublic | BindingFlags.Instance); RemoteEP = (IPEndPoint)((Socket)socket.GetValue(stream, null)).RemoteEndPoint; LocalEP = (IPEndPoint)((Socket)socket.GetValue(stream, null)).LocalEndPoint; // Start reverse DNS lookup using an asynchronous task. Task <IPHostEntry> rdnsTask = Dns.GetHostEntryAsync(IPAddress.Parse(RemoteEP.Address.ToString())); //Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); //byte[] b = Encoding.GetEncoding("IBM437").GetBytes(text + "\n\r"); // Send ASCII FF + BS and ANSI Clear Screen Write("\u000c\u0008\u001B[2J\r"); // Send Telnet handshake Telnet.Initialize(stream); // Send Banner and Initializing Write(Banner + "\r\n\u001B[0;32m Initializing..."); // Send ANSI detect. byte[] ansi = { 27, 91, 54, 110 }; // ANSI (ESC)[6n - Request Cursor Position stream.Write(ansi, 0, ansi.Length); await Task.Delay(200); try { // Read the response. stream.Read(readBuffer, 0, 1024); // Check if response contains an ANSI excape sequence. // ansiDetected = Encoding.UTF8.GetString(readBuffer).Contains("\u001B["); ansiDetected = Regex.IsMatch(Encoding.UTF8.GetString(readBuffer), "\\x1b[[0-9;]*R"); } catch (Exception) { // TODO: Log ANSI detection error. } // TODO: skip ReverseDNS if localhost or local interface // Get the reverse DNS result. //await Task.Delay(2000); ReverseDNS = "UNKNOWN"; try { rdnsTask.Wait(); ReverseDNS = rdnsTask.Result.HostName; } catch (Exception) { // TODO: Log reverse DNS error. } // Send initialized event Initialized(this, new EventArgs()); }