コード例 #1
0
ファイル: TCPServer.cs プロジェクト: 10tpell/ChatApp
        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();
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
        }
コード例 #4
0
ファイル: Program.cs プロジェクト: JKSaber/message
        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();
                }
            }
        }
コード例 #5
0
ファイル: Program.cs プロジェクト: cbeguinot/networkingLab3
        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();
        }
コード例 #6
0
ファイル: TelnetServer.cs プロジェクト: TW2002/twxp
        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());
                }
            }
        }
コード例 #7
0
        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);
            }
        }
コード例 #8
0
    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();
        }
    }
コード例 #9
0
        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);
        }
コード例 #10
0
ファイル: blala.cs プロジェクト: fboas/OutlawzChecker
        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);
            }
        }
コード例 #11
0
ファイル: TelnetClient.cs プロジェクト: TW2002/twxp
        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);
            }
        }
コード例 #12
0
ファイル: Server.cs プロジェクト: skyformat99/MysqlPot
        /*
         * 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()
コード例 #13
0
ファイル: Client.cs プロジェクト: jvoeller0129/FirstMate
        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());
        }