好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識庫 > Perl實現的Linux下socket代理服務器

Perl實現的Linux下socket代理服務器

熱門標簽:惠州龍門400電話要怎么申請 okcc外呼系統怎么調速度 熱門電銷機器人 智能機器人電銷神器 上海企業外呼系統 河南虛擬外呼系統公司 電話機器人哪里有賣 外呼電信系統 萬利達百貨商場地圖標注

大家提供了許多linux開代理的方法,一般用到python等語言,一些服務器可能不會安裝,然而perl可以說是linux標配的語言,給大家一款Perl語言的socket代理,代碼非常少,而且還支持密碼,效果還是不錯,感覺很穩定。

#!/usr/bin/perl 
 
$auth_enabled = 0; 
$auth_login = "hidden"; 
$auth_pass = "hidden"; 
$port = 44269; 
 
use IO::Socket::INET; 
 
$SIG{'CHLD'} = 'IGNORE'; 
$bind = IO::Socket::INET->new(Listen=>10, Reuse=>1, LocalPort=>$port) or die "Нельзя забиндить порт $port\n"; 
 
while($client = $bind->accept()) { 
$client->autoflush(); 
 
if(fork()){ $client->close(); } 
else { $bind->close(); new_client($client); exit(); } 
} 
 
sub new_client { 
local $t, $i, $buff, $ord, $success; 
local $client = $_[0]; 
sysread($client, $buff, 1); 
 
if(ord($buff) == 5) { 
 sysread($client, $buff, 1); 
 $t = ord($buff); 
 
 unless(sysread($client, $buff, $t) == $t) { return; } 
 
 $success = 0; 
 for($i = 0; $i  $t; $i++) { 
 $ord = ord(substr($buff, $i, 1)); 
 if($ord == 0  !$auth_enabled) { 
  syswrite($client, "\x05\x00", 2); 
  $success++; 
  break; 
 } 
 elsif($ord == 2  $auth_enabled) { 
  unless(do_auth($client)){ return; } 
  $success++; 
  break; 
 } 
 } 
 
 if($success) { 
 $t = sysread($client, $buff, 3); 
 
 if(substr($buff, 0, 1) == '\x05') { 
  if(ord(substr($buff, 2, 1)) == 0) { 
  ($host, $raw_host) = socks_get_host($client); 
  if(!$host) { return; } 
  ($port, $raw_port) = socks_get_port($client); 
  if(!$port) { return; } 
  $ord = ord(substr($buff, 1, 1)); 
  $buff = "\x05\x00\x00".$raw_host.$raw_port; 
  syswrite($client, $buff, length($buff)); 
  socks_do($ord, $client, $host, $port); 
  } 
 } 
 } else { syswrite($client, "\x05\xFF", 2); }; 
} 
$client->close(); 
} 
 
sub do_auth { 
local $buff, $login, $pass; 
local $client = $_[0]; 
 
syswrite($client, "\x05\x02", 2); 
sysread($client, $buff, 1); 
 
if(ord($buff) == 1) { 
 sysread($client, $buff, 1); 
 sysread($client, $login, ord($buff)); 
 sysread($client, $buff, 1); 
 sysread($client, $pass, ord($buff)); 
 
 if($login eq $auth_login  $pass eq $auth_pass) { 
 syswrite($client, "\x05\x00", 2); 
 return 1; 
 } else { syswrite($client, "\x05\x01", 2); } 
} 
 
$client->close(); 
return 0; 
} 
 
sub socks_get_host { 
local $client = $_[0]; 
local $t, $ord, $raw_host; 
local $host = ""; 
 
sysread($client, $t, 1); 
$ord = ord($t); 
if($ord == 1) { 
 sysread($client, $raw_host, 4); 
 @host = $raw_host =~ /(.)/g; 
 $host = ord($host[0]).".".ord($host[1]).".".ord($host[2]).".".ord($host[3]); 
} elsif($ord == 3) { 
 sysread($client, $raw_host, 1); 
 sysread($client, $host, ord($raw_host)); 
 $raw_host .= $host; 
} elsif($ord == 4) { 
 #ipv6 - not supported 
} 
 
return ($host, $t.$raw_host); 
} 
 
sub socks_get_port { 
local $client = $_[0]; 
local $raw_port, $port; 
sysread($client, $raw_port, 2); 
$port = ord(substr($raw_port, 0, 1))  8 | ord(substr($raw_port, 1, 1)); 
return ($port, $raw_port); 
} 
 
sub socks_do { 
local($t, $client, $host, $port) = @_; 
 
if($t == 1) { socks_connect($client, $host, $port); } 
elsif($t == 2) { socks_bind($client, $host, $port); } 
elsif($t == 3) { socks_udp_associate($client, $host, $port); } 
else { return 0; } 
 
return 1; 
} 
 
sub socks_connect { 
my($client, $host, $port) = @_; 
my $target = IO::Socket::INET->new(PeerAddr => $host, PeerPort => $port, Proto => 'tcp', Type => SOCK_STREAM); 
 
unless($target) { return; } 
 
$target->autoflush(); 
while($client || $target) { 
 my $rin = ""; 
 vec($rin, fileno($client), 1) = 1 if $client; 
 vec($rin, fileno($target), 1) = 1 if $target; 
 my($rout, $eout); 
 select($rout = $rin, undef, $eout = $rin, 120); 
 if (!$rout  !$eout) { return; } 
 my $cbuffer = ""; 
 my $tbuffer = ""; 
 
 if ($client  (vec($eout, fileno($client), 1) || vec($rout, fileno($client), 1))) { 
 my $result = sysread($client, $tbuffer, 1024); 
 if (!defined($result) || !$result) { return; } 
 } 
 
 if ($target  (vec($eout, fileno($target), 1) || vec($rout, fileno($target), 1))) { 
 my $result = sysread($target, $cbuffer, 1024); 
 if (!defined($result) || !$result) { return; } 
 } 
 
 if ($fh  $tbuffer) { print $fh $tbuffer; } 
 
 while (my $len = length($tbuffer)) { 
 my $res = syswrite($target, $tbuffer, $len); 
 if ($res > 0) { $tbuffer = substr($tbuffer, $res); } else { return; } 
 } 
 
 while (my $len = length($cbuffer)) { 
 my $res = syswrite($client, $cbuffer, $len); 
 if ($res > 0) { $cbuffer = substr($cbuffer, $res); } else { return; } 
 } 
} 
} 
 
sub socks_bind { 
my($client, $host, $port) = @_; 
} 
 
sub socks_udp_associate { 
my($client, $host, $port) = @_; 
}
您可能感興趣的文章:
  • linux下開啟php的sockets擴展支持實例
  • Linux下高并發socket最大連接數所受的各種限制(詳解)
  • 詳解Linux的SOCKET編程
  • C語言實現Linux下的socket文件傳輸實例
  • Linux網絡編程之UDP Socket程序示例
  • Linux網絡編程之socket文件傳輸示例
  • linux socket通訊獲取本地的源端口號的實現方法

標簽:合肥 周口 周口 淮安 綏化 綿陽 秦皇島 百色

巨人網絡通訊聲明:本文標題《Perl實現的Linux下socket代理服務器》,本文關鍵詞  Perl,實現,的,Linux,下,socket,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Perl實現的Linux下socket代理服務器》相關的同類信息!
  • 本頁收集關于Perl實現的Linux下socket代理服務器的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 亚洲AV秘?无码一区在线观看| 人人妻人人澡人人爽人人添学生| 动漫被吸乳羞羞漫画| 被影帝cao到崩溃H| 亚洲人成亚洲人成| 嗯灬啊灬把腿张开灬A片功能介绍| 最近高清中文字幕完整版| 美女隐私秘秘?18禁视频网站| 日本加勒比av| 国产成人自啪精品视频| 操美女电影| ?77788色婬免费网站视频| 女人把私密部位扒开让男生摸| 午夜AV内射一区二区三区红桃视| 欧美日在线| 皮带抽打白嫩光屁股sp| 人禽伦免费交视频播放| 国产精品v在线播放观看| 国产一区二区三区免费大片天美| 床戏嗯啊假戏真做进去了| 动漫18?动漫免费网站免费观看| 91精品国产蜜臀色欲| 亚洲精品亚洲人成在线| 厨房客厅征服美妇| 亚洲日本va| 国产专区一线二线三线品牌| 欧美人与禽ZOZZO性伦三区| 舌头伸进去添的我好爽| 国产vvv在线观看| 欧美H版四级成人版电影| 韩国精品在线| 极品嫩模福利在线AV| 纯爱无遮挡h肉动漫在线播放| 陆雪琪3D被?在线观看| xvideos中国gay| 玖玖色资源| 超市情欲| 少妇婬荡呻吟久久久久久福利姬 | 91精品国产99久久久久久| 免费无遮挡毛片| 女性私密部位粉嫩嫩|