从perl中的SOCKET读取HTTP请求

时间:2014-09-10 17:13:53

标签: perl sockets http tcp ssh

我在PERL中读取套接字时遇到问题。

故事是这样的: 1.1.1.1是我的服务器 2.2.2.2是我的另一台服务器,它在1.1.1.1上作为ssh隧道打开 3.3.3.3是来自Mozilla Firefox

的IP

我在端口12345tcp.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并按ACKSEQ标记排序,然后阅读它。

现在我的主要问题是,如何阅读HTML内容?

谢谢。

0 个答案:

没有答案