Net-SC version 1.20 =================== INSTALLATION To install this module type the following: perl Makefile.PL make make test make install COPYRIGHT AND LICENCE Copyright (C) by Okunev Igor gosha@prv.mts-nn.ru 2002-2006 All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =================== NAME Net::SC - perl module for create the chain from the SOCKS/HTTP proxies. SYNOPSIS # CONNECT TO HOST # ---------------- ... $self = new Net::SC( Timeout => ( $opt{'to'} || 10 ), Chain_Len => ( $opt{'l'} || 2 ), Debug => ( $opt{'d'} || 0x04 ), Log_File => ( $opt{'lf'} || undef ), Random_Chain => ( $opt{'rnd'} || 0 ), Auto_Save => 1 ); die unless ref $self; unless ( ( $rc = $self->connect( $host, $port ) ) == SOCKS_OKAY ) { print STDERR "Can't connect to $host:$port [".( socks_error($rc) )."]\n"; exit; } $sh = $self->sh; print $sh, "Hello !!!\n"; ... --- or --- ... $self = new Net::SC( Timeout => ( $opt{'to'} || 10 ), Chain_Len => ( $opt{'l'} || 2 ), Debug => ( $opt{'d'} || 0x04 ), Random_Chain => ( $opt{'rnd'} || 0 ), Auto_Save => 0, Chain_File_Data => [ '200.41.23.164:1080:::4:383 b/s Argentina', '24.232.88.160:1080:::4:1155 b/s Argentina', '24.2.8.160:3128:::0:HTTP proxy', ], ); die unless ref $self; unless ( ( $rc = $self->connect( $host, $port ) ) == SOCKS_OKAY ) { print STDERR "Can't connect to $host:$port [".( socks_error($rc) )."]\n"; exit; } $sh = $self->sh; print $sh, "Hello !!!\n"; ... $self->close; ... # BIND THE PORT ( only SOCKS [4/5] proxies ) # --------------- ... $self = new Net::SC( Timeout => ( $opt{'to'} || 10 ), Chain_len => ( $opt{'l'} || 2 ), Debug => ( $opt{'d'} || 0x04 ), Log_file => ( $opt{'lf'} || undef ), Random_chain => ( $opt{'rnd'} || 0 ), Auto_save => 1 ); die unless ref $self; unless ( ( $rc = $self->bind( $host, $port ) ) == SOCKS_OKAY ) { print STDERR "Can't bind port [".( socks_error($rc) )."]\n"; exit; } print STDOUT "Binding the port : ", $self->socks_param('listen_port'), "\n"; print STDOUT " in the host : ", $self->socks_param('listen_addr'), "\n"; print STDOUT " for $host\n"; $self->configure( TIMEOUT => 45 ); unless ( ( $rc = $self->accept() ) == SOCKS_OKAY ) { return $rc; } else { $sh = $self->sh; } print STDOUT 'Connect from: ', $self->socks_param('listen_addr'), ':', $self->socks_param('listen_port'), "\n"; print $sh 'Hello : ', $self->socks_param('listen_addr'), "\n"; print $sh ' port : ', $self->socks_param('listen_port'), "\n"; print STDOUT <$sh>; ... For more information see examples: telnet_over_socks_chain.pl and accept_over_socks_chain.pl DESCRIPTION CONSTRUCTOR new TIMEOUT - Time Out in seconds. CHAIN_LEN - Length of chain. DEBUG - Debug level ( 0x00 | 0x01 | 0x02 | 0x04 ) 0x00 - Off 0x01 - Debug On 0x02 - Write all answers of socks servers. 0x04 - Write all requests of socks servers. 0x08 - Extended error information. CHAIN_FILE - Configuration file name. CHAIN_FILE_DATA - Array reference. ( a format same as well as in a file of a configuration ). It is possible to use for data transmission about chains directly, without use of a file of a configuration. At use of the given parameter, parameter CHAIN_FILE is ignored, that is the file of a configuration is not read. LOG_FILE - Log file name. if undef, writing all errors to STDERR or `syslogd` RANDOM_CHAIN - Rule for create the chains ( 0 || 1 ). 0 - create chain by index... 1 - create chain by random... CHECK_DELAY - Delay time for the next usage this proxy if the last connection failed ( in seconds ) AUTO_SAVE - Auto save the data of chain to the cache file. LOG_FH - File Descriptor of LOG file. SYSLOG - 1 - Use syslogd ( for *nix ), or eventlog ( for win32 ) for debug messages. Default 0. HTTP_CLIENT - User-Agent name for http proxies METHODS connect Create new connection to remote host. Usage: die unless $self->connect( $peer_host, $peer_port ) == SOCKS_OKAY; bind Binding port. Usage: die unless $self->bind( $peer_host, $peer_port ) == SOCKS_OKAY; accept Accepting connection over SOCKS Usage: die unless $self->accept() == SOCKS_OKAY; $sh = $self->sh; sh Returns the sock handle Usage: $sh = $self->sh; close Close the connection. Usage: $self->close; configure Returns [ and modify ] the current configuration options. Usage: # Change TIMEOUT $self->configure( TIMEOUT => 10 ); # Returns TIMEOUT $timeout = $self->configure( 'TIMEOUT' ); socks_param Returns parameters of the last server into the chain socks... Usage: $listen_addr = $self->socks_param( 'listen_Addr' ); or: $all_param = $self->socks_param(); $listen_addr = $all_param->{'listen_addr'}; ANY ROUTINES socks_error( ERROR_CODE ) Returns the error message. Socks error codes: SOCKS_GENERAL_SOCKS_SERVER_FAILURE SOCKS_CONNECTION_NOT_ALLOWED_BY_RUL SOCKS_NETWORK_UNREACHABLE SOCKS_HOST_UNREACHABLE SOCKS_CONNECTION_REFUSED SOCKS_TTL_EXPIRED SOCKS_COMMAND_NOT_SUPPORTED SOCKS_ADDRESS_TYPE_NOT_SUPPORTED SOCKS_OKAY SOCKS_FAILED SOCKS_NO_IDENT SOCKS_USER_MISMATCH SOCKS_INCOMPLETE_AUTH SOCKS_BAD_AUTH SOCKS_SERVER_DENIES_AUTH_METHOD SOCKS_MISSING_SOCKS_SERVER_NET_DATA SOCKS_MISSING_PEER_NET_DATA SOCKS_SOCKS_SERVER_UNAVAILABLE SOCKS_TIMEOUT SOCKS_UNSUPPORTED_PROTOCOL_VERSION SOCKS_UNSUPPORTED_ADDRESS_TYPE SOCKS_HOSTNAME_LOOKUP_FAILURE $self->read_chain_data(); Reading the configuration file. $self->get_socks_count Returns the number of the socks servers $self->mark_proxy ( $proxy_id, $status ); Mark the socks server with index $proxy_id how dead if $status not equally SOCKS_OKAY, otherwise clearing counter of the connection failure... $self->dump_cfg_data(); Dump socks data, in the cache file. $self->restore_cfg_data(); Restore socks data, from the cache file. NOTES accept method change the follow variable, which returns of the socks_param: listen_addr listen_port Methods connect, bind, accept returnings SOCKS_OKAY if it succeeded. Http proxies do not support bind method. Http proxies support only Basic auth. CONFIG FORMAT #host : port : uid : pswd : socks_proto 192.168.1.90 : 1080 : : : 5 192.18.122.90 : 3128 : bbb : ccc : 0 ... You can use the comments in the configuration file, for this you must write `#' in the beginning of string... THANKS JoNO - for ideas of a writing of support http a proxy. SEE ALSO perl, RFC 1928, RFC 1929, ... AUTHOR Igor V. Okunev mailto:igor@prv.mts-nn.ru http://www.mts-nn.ru/~gosha icq:106183300