吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2605|回复: 3
收起左侧

[会员申请] 申请会员ID:HUC_血刃【冒出他人作品申请】

[复制链接]
吾爱游客  发表于 2015-3-31 17:11
1、申 请 I D :HUC_血刃
2、个人邮箱:1012427372@qq.com
3、原创技术文章:
本人也不是什么大牛不大牛大学接触电脑,目前大三准备毕业,计算机网络硬件专业,主要从事服务器安全管理,目前正在重庆上班呢!也没什么很鸟不起的像大牛们的作品沾着就是一大堆代码,我就发一个简单的LINUX SOCKET 代{过}{滤}理,希望能过,废话就不多扯淡了,直接重点。
许多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接触时间也就半年,这篇帖子也是我刚学LINUX时候做的,好像有半年多了,本人主要精通WINDOWS、LINUX服务器的配置与安全管理,还有一些以前发的帖子,都是什么LINUX下DNS、DHCP、FTP服务器的配置等等的基础玩意儿,这里我就不拿出来丢人了!!望给过啊!!)

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

Hmily 发表于 2015-4-1 18:16
http://www.dute365.com/thread-16996-1-1.html 百度了一下到处都是,你写的?
吾爱游客  发表于 2015-4-1 22:31
算了,这个的确也不是我的,不解释,我论坛很多LINUX的视屏,换一篇吧!!
吾爱游客  发表于 2015-4-1 22:34
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-15 18:45

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表