Guest User

Untitled

a guest
Aug 8th, 2018
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Perl 4.96 KB | None | 0 0
  1.  
  2. #!/usr/bin/perl
  3.  
  4. #                     Satanic Socks Server v0.8.031206-perl
  5. #    This script is private. Only for SaTaNiC team and friends. Not for sale.
  6. #                                     Modified by Jay 2011-2012
  7.  
  8. $auth_enabled = 1;
  9. # Het is verstandig om de $auth functie te gebruiken
  10. $auth_login = "username";
  11. $auth_pass = "password";
  12. # De poort kun je in een niet gedefinieerde poort veranderen - dus geen poort 80 etc.
  13. $port = 1337;
  14.  
  15. use IO::Socket::INET;
  16.  
  17. $SIG{'CHLD'} = 'IGNORE';
  18. $bind = IO::Socket::INET->new(Listen=>10, Reuse=>1, LocalPort=>$port) or  die "Can't bind port $port\n";
  19.  
  20. while($client = $bind->accept()) {
  21. $client->autoflush();
  22.  
  23. if(fork()){ $client->close(); }
  24. else { $bind->close(); new_client($client); exit(); }
  25. }
  26.  
  27. sub new_client {
  28. local $t, $i, $buff, $ord, $success;
  29. local $client = $_[0];
  30. sysread($client, $buff, 1);
  31.  
  32. if(ord($buff) == 5) {
  33.   sysread($client, $buff, 1);
  34.   $t = ord($buff);
  35.  
  36.   unless(sysread($client, $buff, $t) == $t) { return; }
  37.  
  38.   $success = 0;
  39.   for($i = 0; $i < $t; $i++) {
  40.     $ord = ord(substr($buff, $i, 1));
  41.     if($ord == 0 && !$auth_enabled) {
  42.       syswrite($client, "\x05\x00", 2);
  43.       $success++;
  44.       break;
  45.     }
  46.     elsif($ord == 2 && $auth_enabled) {
  47.       unless(do_auth($client)){ return; }
  48.       $success++;
  49.       break;
  50.     }
  51.   }
  52.  
  53.   if($success) {
  54.     $t = sysread($client, $buff, 3);
  55.  
  56.     if(substr($buff, 0, 1) == '\x05') {
  57.       if(ord(substr($buff, 2, 1)) == 0) { # reserved
  58.         ($host, $raw_host) = socks_get_host($client);
  59.         if(!$host) {  return; }
  60.         ($port, $raw_port) = socks_get_port($client);
  61.         if(!$port) { return; }
  62.         $ord = ord(substr($buff, 1, 1));
  63.         $buff = "\x05\x00\x00".$raw_host.$raw_port;
  64.         syswrite($client, $buff, length($buff));
  65.         socks_do($ord, $client, $host, $port);
  66.       }
  67.     }
  68.   } else { syswrite($client, "\x05\xFF", 2); };
  69. }
  70. $client->close();
  71. }
  72.  
  73. sub do_auth {
  74. local $buff, $login, $pass;
  75. local $client = $_[0];
  76.  
  77. syswrite($client, "\x05\x02", 2);
  78. sysread($client, $buff, 1);
  79.  
  80. if(ord($buff) == 1) {
  81.   sysread($client, $buff, 1);
  82.   sysread($client, $login, ord($buff));
  83.   sysread($client, $buff, 1);
  84.   sysread($client, $pass, ord($buff));
  85.  
  86.   if($login eq $auth_login && $pass eq $auth_pass) {
  87.     syswrite($client, "\x05\x00", 2);
  88.     return 1;
  89.   } else { syswrite($client, "\x05\x01", 2); }
  90. }
  91.  
  92. $client->close();
  93. return 0;
  94. }
  95.  
  96. sub socks_get_host {
  97. local $client = $_[0];
  98. local $t, $ord, $raw_host;
  99. local $host = "";
  100.  
  101. sysread($client, $t, 1);
  102. $ord = ord($t);
  103. if($ord == 1) {
  104.   sysread($client, $raw_host, 4);
  105.   @host = $raw_host =~ /(.)/g;
  106.   $host = ord($host[0]).".".ord($host[1]).".".ord($host[2]).".".ord($host[3]);
  107. } elsif($ord == 3) {
  108.   sysread($client, $raw_host, 1);
  109.   sysread($client, $host, ord($raw_host));
  110.   $raw_host .= $host;
  111. } elsif($ord == 4) {
  112.   #ipv6 - not supported
  113. }
  114.  
  115. return ($host, $t.$raw_host);
  116. }
  117.  
  118. sub socks_get_port {
  119. local $client = $_[0];
  120. local $raw_port, $port;
  121. sysread($client, $raw_port, 2);
  122. $port = ord(substr($raw_port, 0, 1)) << 8 | ord(substr($raw_port, 1, 1));
  123. return ($port, $raw_port);
  124. }
  125.  
  126. sub socks_do {
  127. local($t, $client, $host, $port) = @_;
  128.  
  129. if($t == 1) { socks_connect($client, $host, $port); }
  130. elsif($t == 2) { socks_bind($client, $host, $port); }
  131. elsif($t == 3) { socks_udp_associate($client, $host, $port); }
  132. else { return 0; }
  133.  
  134. return 1;
  135. }
  136.  
  137. # this part of code was taken from datapipe.pl utility,
  138. # written by CuTTer (cutter[at]real.xakep.ru)
  139. # utility lays on cpan.org
  140.  
  141. sub socks_connect {
  142. my($client, $host, $port) = @_;
  143. my $target = IO::Socket::INET->new(PeerAddr => $host, PeerPort => $port, Proto => 'tcp', Type => SOCK_STREAM);
  144.  
  145. unless($target) { return; }
  146.  
  147. $target->autoflush();
  148. while($client || $target) {
  149.   my $rin = "";
  150.   vec($rin, fileno($client), 1) = 1 if $client;
  151.   vec($rin, fileno($target), 1) = 1 if $target;
  152.   my($rout, $eout);
  153.   select($rout = $rin, undef, $eout = $rin, 120);
  154.   if (!$rout  &&  !$eout) { return; }
  155.   my $cbuffer = "";
  156.   my $tbuffer = "";
  157.  
  158.   if ($client && (vec($eout, fileno($client), 1) || vec($rout, fileno($client), 1))) {
  159.     my $result = sysread($client, $tbuffer, 1024);
  160.     if (!defined($result) || !$result) { return; }
  161.   }
  162.  
  163.   if ($target  &&  (vec($eout, fileno($target), 1)  || vec($rout, fileno($target), 1))) {
  164.     my $result = sysread($target, $cbuffer, 1024);
  165.     if (!defined($result) || !$result) { return; }
  166.     }
  167.  
  168.   if ($fh  &&  $tbuffer) { print $fh $tbuffer; }
  169.  
  170.   while (my $len = length($tbuffer)) {
  171.     my $res = syswrite($target, $tbuffer, $len);
  172.     if ($res > 0) { $tbuffer = substr($tbuffer, $res); } else { return; }
  173.   }
  174.  
  175.   while (my $len = length($cbuffer)) {
  176.     my $res = syswrite($client, $cbuffer, $len);
  177.     if ($res > 0) { $cbuffer = substr($cbuffer, $res); } else { return; }
  178.   }
  179. }
  180. }
  181.  
  182. sub socks_bind {
  183. my($client, $host, $port) = @_;
  184. # not supported
  185. }
  186.  
  187. sub socks_udp_associate {
  188. my($client, $host, $port) = @_;
  189. # not supported
  190. }
Add Comment
Please, Sign In to add comment