2011-01-25 50 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)。檢查$_的內容,我打賭你會發現不同的東西。