0

我一直在尝试调试这个 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";
            }
...
4

3 回答 3

1

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

要摆脱“可能的错字”消息,并且因为$empty并且$junk似乎在您的代码中未使用,请编写:

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

if ($result[1] == 0x5A) {
# ...
}
于 2011-01-25T13:32:33.833 回答
1

只是一个旁注:我认为您正在考虑 $@,而不是 @$。您需要将代码包含在

eval { ... };

建造。看:

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

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

当然,这不能回答最初的问题:)

于 2011-01-25T13:38:46.163 回答
0

该错误消息意味着您PeerAddrIO::Socket::INET->new调用中的参数值无效。

构造函数期望该PeerAddr值是主机名或 IP 地址 (nnn.nnn.nnn.nnn)。检查内容,$_我打赌你会发现一些不同的东西。

于 2011-01-25T23:19:19.227 回答