我在PERL
中读取套接字时遇到问题。
故事是这样的:
1.1.1.1
是我的服务器
2.2.2.2
是我的另一台服务器,它在1.1.1.1
上作为ssh隧道打开
3.3.3.3
是来自Mozilla Firefox
我在端口12345
和tcp.pl
"服务器"上打开了ssh隧道。在端口2000
上打开,并且转发所有原始流量到端口12345
,然后再将其恢复。
我已经选择了Mozilla Firefox
并放置在 SOCKS5 1.1.1.1:2000
(tcp.pl服务器),当我在网上冲浪时,我使用2.2.2.2
浏览“知识产权是好的。
我在代码中写了一些软件来打印tcp.pl
使用此命令获得的所有套接字:
`print $buffer;`
问题是我可以阅读 HTTP HEADERS ,我看到像
这样的内容GET / HTTP/1.1
Host: site.com
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:29.0) Gecko/20100101 Firefox/29.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Cookie: _ga=GA1.2.1235518067.1410367631
Connection: keep-alive
女巫没关系,但我没有完全得到 HTTP内容,我的意思是我没有得到 HTML代码。我有时会得到HTML CODE的一部分
:G�� ��� <-- some wired characters
<html>...</html>
���lOP� <-- some wired characters
有时我会
PuTTyPuTTyPuTTyPuTTyPuTTyPuTTyPuTTyPuTTyPuTTyPuTTyPuTTy
发出哔哔声。
代码(tcp.pl)
读取读取和读取的无限循环....
while (1)
{
for my $socket ($ioset->can_read)
{
if($socket == $server)
{
new_connection($server);
}
else
{
next unless exists $socket_map{$socket};
my $remote = $socket_map{$socket};
my $buffer;
# get data from main port
my $read = $socket->sysread($buffer, 4096);
if ($read)
{
print $read; # gives a number like 43243 5436346456 34654643464
print $buffer; # allways gives HTTP headers, and token is frequently distorted, showing characters like ":G�� ������lOP�" and some chunks of HTML CODE from time to time
# sometimes i get output like "PuTTyPuTTyPuTTyPuTTyPuTTyPuTTyPuTTyPuTTyPuTTyPuTTyPuTTy" and hearing some beeping sounds
# forward data to the other port (in browser you see no differance)
$remote->syswrite($buffer);
}
else {
close_connection($socket);
}
}
}
}
我相信这是因为我没有正确订购数据包,我的意思是我必须阅读SOCKETS并按ACK
和SEQ
标记排序,然后阅读它。
现在我的主要问题是,如何阅读HTML内容?
谢谢。