捕获浏览器流量并重新发送 [英] capture browser traffic and resend it
本文介绍了捕获浏览器流量并重新发送的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我的第一个功能:
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屋!
查看全文