Perl套接字连接检查

时间:2011-01-25 13:15:27

标签: perl socks

我一直试图调试这个perl问题一段时间,但没有取得成功。我想要做的是阻止连接是否是socks4 / 5连接。

# ./pctest.pl
Name "main::junk" used only once: possible typo at ./pctest.pl line 60.
Name "main::empty" used only once: possible typo at ./pctest.pl line 60.
IO::Socket::INET: Bad hostname 'C1(X'   ...propagated at ./pctest.pl line 52.

我也有这个错误(在我添加或死之前@ $;最后):

Can't use an undefined value as a symbol reference at ./pctest.pl line 56.

...
  $look = IO::Socket::INET->new( PeerAddr => $_, Proto => 'tcp', Timeout => 5 ) or die @$;

            $sock4 = pack( "CCS", 4, 1, 80 );

            print $look $sock4;

            read( $look, $recv, 10 );

            ( $empty, $granted, $junk ) = unpack( "C C C6", $recv );

            if( $granted == 0x5A )
            {
                    print " Yes\n";
            }
            else
            {
                    print " No\n";
            }
...

3 个答案:

答案 0 :(得分:1)

有一个错字。 @$应该是$@

要删除“可能的拼写错误”消息,并且$empty$junk似乎在您的代码中未使用,请写下:

my @result = unpack("C C C6", $recv);

if ($result[1] == 0x5A) {
# ...
}

答案 1 :(得分:1)

只是旁注:我认为你在考虑$ @而不是@ $。您需要将代码括在

eval { ... };

构造。参见:

my $look;
eval { $look = IO::Socket::INET->new( PeerAddr => $_, Proto => 'tcp', Timeout => 5 ) };

if ($@) {
   do_something_with($@);
}

当然,这不回答原来的问题:)

答案 2 :(得分:0)

错误消息表示PeerAddr来电中IO::Socket::INET->new的参数值无效。

构造函数要求PeerAddr值为主机名或IP地址(nnn.nnn.nnn.nnn)。检查$_的内容,我打赌你会找到不同的东西。