Rechercher une page de manuel
IO::Socket::Socks.3pm
Langue: en
Version: 2009-04-04 (debian - 07/07/09)
Section: 3 (Bibliothèques de fonctions)
Sommaire
NAME
IO::Socket::Socks - SOCKS v5 proxy support for IO::SocketSYNOPSIS
Provides a way to open a connection to a SOCKS v5 proxy and use the object just like an IO::Socket.DESCRIPTION
IO::Socket::Socks connects to a SOCKS v5 proxy, tells it to open a connection to a remote host/port when the object is created. The object you receive can be used directly as a socket for sending and receiving data from the remote host.EXAMPLES
Client
use IO::Socket::Socks;my $socks = new IO::Socket::Socks(ProxyAddr=>``proxy host'',
ProxyPort=>``proxy port'',
ConnectAddr=>``remote host'',
ConnectPort=>``remote port'',
);
print $socks ``foo\n'';
$socks->close();
Server
use IO::Socket::Socks;my $socks_server = new IO::Socket::Socks(ProxyAddr=>``localhost'',
ProxyPort=>``8000'',
Listen=>1,
UserAuth=>\&auth,
RequireAuth=>1
);
my $select = new IO::Select($socks_server);
while(1) {
if ($select->can_read())
{
my $client = $socks_server->accept();
if (!defined($client)) { print "ERROR: $SOCKS_ERROR\n"; next; } my $command = $client->command(); if ($command->[0] == 1) # CONNECT { # Handle the CONNECT $client->command_reply(0, addr, port); } ... #read from the client and send to the CONNECT address ... $client->close(); } }
sub auth {
my $user = shift;
my $pass = shift;
return 1 if (($user eq "foo") && ($pass eq "bar")); return 0; }
METHODS
new( %cfg )
Creates a new IO::Socket::Socks object. It takes the following config hash:ProxyAddr => Hostname of the proxy ProxyPort => Port of the proxy ConnectAddr => Hostname of the remote machine ConnectPort => Port of the remote machine AuthType => What kind of authentication to support: none - no authentication (default) userpass - Username/Password RequireAuth => Do not send, or accept, ANON as a valid auth mechanism. UserAuth => Function that takes ($user,$pass) and returns 1 if they are allowed, 0 otherwise. Username => If AuthType is set to userpass, then you must provide a username. Password => If AuthType is set to userpass, then you must provide a password. SocksDebug => This will cause all of the SOCKS traffic to be presented on the command line in a form similar to the tables in the RFCs. Listen => 0 or 1. Listen on the ProxyAddr and ProxyPort for incoming connections.
accept( )
Accept an incoming connection and return a new IO::Socket::Socks object that represents that connection. You must call command() on this to find out what the incoming connection wants you to do, and then call command_reply() to send back the reply.command( )
After you call accept() the client has sent the command they want you to process. This function returns a reference to an array with the following format:[ COMMAND, HOST, PORT ]
command_reply( REPLY CODE, HOST, PORT )
After you call command() the client needs to be told what the result is. The REPLY CODE is as follows (integer value):0: Success 1: General Failure 2: Connection Not Allowed 3: Network Unreachable 4: Host Unreachable 5: Connection Refused 6: TTL Expired 7: Command Not Supported 8: Address Not Supported
HOST and PORT are the resulting host and port that you use for the command.
VARIABLES
$SOCKS_ERROR
This scalar behaves like $! in that if undef is returned, this variable should contain a string reason for the error.AUTHOR
Ryan EatmonCOPYRIGHT
This module is free software, you can redistribute it and/or modify it under the same terms as Perl itself.Contenus ©2006-2024 Benjamin Poulain
Design ©2006-2024 Maxime Vantorre