Perl Socket Connection Check
I've been trying to debug this perl issue for awhile but had made no head way. what I'm trying to do is determain if the connection is a socks4/5 connection.
# ./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.
I've also had this error (before i added or die @$; at the end):
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";
}
...
There's a typo. @$
should really be $@
.
To get rid of the "possible typo" messages and since $empty
and $junk
seem to be unused in your code, write:
my @result = unpack("C C C6", $recv);
if ($result[1] == 0x5A) {
# ...
}
Just a side note : I think you are thinking of $@, instead of @$. You need to enclose the code in an
eval { ... };
construction. See:
my $look;
eval { $look = IO::Socket::INET->new( PeerAddr => $_, Proto => 'tcp', Timeout => 5 ) };
if ($@) {
do_something_with($@);
}
Granted, that doesn't answer the original question :)
The error message means that your parameter value for PeerAddr
in the IO::Socket::INET->new
call is invalid.
The constructor expects the PeerAddr
value to be a hostname or an IP address (nnn.nnn.nnn.nnn). Check the contents of $_
and I bet you'll find something different.
精彩评论