Click here to Skip to main content
15,880,972 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
hi every body. i want capture browser traffic and resend it also i want get response stream and resend it to browser. everything is ok but in some case the result webpage dose not appear correctly.

its my first function :
C#
private void StartHttpListening()
   {
       while (true)
       {
           TcpListener tcpListener = new TcpListener(IPAddress.Any, 9090);

           tcpListener.Start();
           TcpClient tcpClient = tcpListener.AcceptTcpClient();
           NetworkStream browserStream = tcpClient.GetStream();
           tcpListener.Stop();
           Thread thr = new Thread(new ParameterizedThreadStart(ListenToHTTPStream));
           thr.IsBackground = true;
           thr.Start(browserStream);
       }
   }

i use this function for get request from browser
C#
private void ListenToHTTPStream(object netStreamObj)
    {
        NetworkStream netStream = (NetworkStream)netStreamObj;
        byte[] requestByte = new byte[65535];

        int readLenght = 0;

        readLenght = netStream.Read(requestByte, 0, 65535);
        GetHTTPResp(netStream, requestByte);

    }

i use this function for get response from server and send it too my browser:
C#
private void GetHTTPResp(NetworkStream browserStream, byte[] requestByte)
    {
        string hostName = GetHostName(requestByte); // return host name from http request command. for example : wwww.yahoo.com

        if (hostName == null) return;

        TcpClient serverConnection;
        try
        {
            serverConnection = new TcpClient(hostName, 80);
        }
        catch { return; }


        byte[] requestBuffer = Encoding.UTF8.GetBytes(Encoding.UTF8.GetString(requestByte));
        NetworkStream serverStream = serverConnection.GetStream();

        serverStream.Write(requestBuffer, 0, requestBuffer.Length);

        byte[] readBuffer = new byte[65535 * 200];

        int numberOfBytesRead = 0;
        int zeroReadTime = 0;
        string s = "";
        while (true)
        {
            try
            {
                numberOfBytesRead = serverStream.Read(readBuffer, 0, 65536);
               Thread.Sleep(50);
                if (numberOfBytesRead == 0)
                {
                    zeroReadTime++;
                }
                else
                {
                    browserStream.Write(readBuffer, 0, numberOfBytesRead);
                    zeroReadTime = 0;
                }

                if (zeroReadTime == 20)
                {
                    browserStream.Close();
                    serverStream.Close();
                    serverConnection.Close();

                    return;
                }
            }
            catch
            {
                browserStream.Close();
                serverStream.Close();
                serverConnection.Close();

                return;
            }
        }

        browserStream.Close();
        serverStream.Close();
        serverConnection.Close();

    }
Posted
Updated 6-May-13 5:43am
v2

1 solution

Hello,

You may want to have a look at this Great Article. There are following open source libraries available

Regards,
 
Share this answer
 
v2

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900