2011-01-25 72 views
0

我一直在试图调试这个perl问题一段时间,但没有采取任何方式。我试图做的是阻止如果连接是socks4/5连接。Perl套接字连接检查

# ./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"; 
      } 
... 

回答

1

有一个错字。 @$应该确实是[email protected]

要摆脱“可能的拼写错误”的消息,自$empty$junk似乎是在代码中未使用的,写:

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

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

只是一个侧面说明:我想您所想$ @的,而不是@ $。您需要附上代码

eval { ... }; 

构造。请参阅:

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

if ([email protected]) { 
    do_something_with([email protected]); 
} 

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

+0

+1提到`eval`构造。我在我的答案中忘记了这一点。 – 2011-01-25 13:42:54

0

错误消息意味着,在IO::Socket::INET->new呼吁PeerAddr您的参数值是无效的。

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