捕获浏览器流量并重新发送 [英] capture browser traffic and resend it

查看:125
本文介绍了捕获浏览器流量并重新发送的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

每个人都喜欢。我想捕获浏览器流量并重新发送它我也想得到响应流并重新发送到浏览器。一切正常,但在某些情况下,结果网页无法正确显示。



我的第一个功能:

  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 线程( new ParameterizedThreadStart(ListenToHTTPStream));
thr.IsBackground = true ;
thr.Start(browserStream);
}
}



i使用此功能获取浏览器的请求

  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使用此功能获取服务器的响应并将其发送给我的浏览器:

  private   void  GetHTTPResp(NetworkStream browserStream, byte  [] requestByte)
{
string hostName = GetHostName(requestByte); // 从http请求命令返回主机名。例如:wwww.yahoo.com

if (hostName == null return ;

TcpClient serverConnection;
try
{
serverConnection = new TcpClient(hostName,< span class =code-digit> 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();

}

解决方案

您好,



你可能想看看这个 伟大的文章。有以下开源库可用



问候,


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 :

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

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:

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();

    }

解决方案

Hello,

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

Regards,


这篇关于捕获浏览器流量并重新发送的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆