Esempio n. 1
0
        public void DownloadPage()
        {
            var ipHostInfo = Dns.GetHostEntry(this.Domain);
            var ipAddress  = ipHostInfo.AddressList[0];
            var remoteEp   = new IPEndPoint(ipAddress, this.Port);

            var socket = new Socket(ipAddress.AddressFamily, SocketType.Stream, ProtocolType.Tcp);

            // connect to the provided target
            socket.BeginConnect(remoteEp, ConnectCallback, socket);
            _connectDone.WaitOne();

            // send the GET request
            var request = "GET " + this.Target + " HTTP/1.1\r\n" +
                          "Host: " + ipAddress + "\r\n" +
                          "Content-Length: 0\r\n" +
                          "\r\n";

            Console.WriteLine("The request is: " + request);

            socket.BeginSend(Encoding.UTF8.GetBytes(request), 0, request.Length, SocketFlags.None, SendCallback, socket);
            _sendDone.WaitOne();

            // receive the data from the target
            var buffer = new byte[2048];

            socket.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, ReceiveCallback, socket);
            _receiveDone.WaitOne();

            string result = Encoding.UTF8.GetString(buffer, 0, buffer.Length);

            HttpResponseParser.parse(result);
            Console.WriteLine(result);
        }
Esempio n. 2
0
        public async void DownloadPage()
        {
            var ipHostInfo = Dns.GetHostEntry(this.Domain);
            var ipAddress  = ipHostInfo.AddressList[0];
            var remoteEp   = new IPEndPoint(ipAddress, this.Port);

            var socket = new Socket(ipAddress.AddressFamily, SocketType.Stream, ProtocolType.Tcp);

            // create a wrapper for the connection information
            var state = new StateObject {
                workSocket     = socket,
                hostname       = Domain,
                endpoint       = Target,
                remoteEndpoint = remoteEp,
            };

            // wait for the connection to succeed
            await ConnectWrapper(state);

            // send the GET request
            var request = Utils.GetRequest(Target, Domain);

            Console.WriteLine("The request is: " + request);
            await SendWrapper(state, request);

            // receive the data
            await ReceiveWrapper(state);

            var response = HttpResponseParser.parse(state.sb.ToString());

            Console.WriteLine("Got response with status {0} and header length {1}", response.Status, response.Headers.Count);

            socket.Close();
        }
Esempio n. 3
0
        private void ReceiveCallback(IAsyncResult asyncResult)
        {
            try {
                StateObject state  = (StateObject)asyncResult.AsyncState;
                Socket      client = state.workSocket;

                int bytesRead = client.EndReceive(asyncResult);
                if (bytesRead > 0)
                {
                    state.sb.Append(Encoding.ASCII.GetString(state.buffer, 0, bytesRead));
                    client.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0, ReceiveCallback, state);
                }
                else
                {
                    // we have received all the data
                    var response = HttpResponseParser.parse(state.sb.ToString());
                    Console.WriteLine("Got response with status {0} and header length {1}", response.Status, response.Headers.Count);
                    receiveDone.Set();
                    client.Close();
                }
            } catch (Exception e) {
                Console.WriteLine(e.ToString());
            }
        }