· @ECHO off· perl -x -S "%0"· goto end· #!perl· #line 6· print "TCP SpyServer Version 2.0 Copyright (c) 2000 Kris Kaspersky\n";·· #Клиент\серверный шпион· use Socket;·· #Настойки по умолчанию· $local_port = 110;· $remote_port = 110;· $server = 'mail.aport.ru';·· #Попытка взятия настоек из файла· if (open(FH,"tcpspy"))· {· $local_port=«FH»;· $local_port =~ s/\n//;· $remote_port=«FH»;· $remote_port =~ s/\n//;· $server=«FH»;· $server=~ s/\n//;·}·· print "Порт локального сервера \t[$local_port]:";· $tmp=«»; $tmp=~ s/\n//;if ($tmp»0) {$local_port=$tmp;}·· print "Порт удаленного сервера \t[$remote_port]:";· $tmp=«»; $tmp=~ s/\n//;if ($tmp»0) {$remote_port=$tmp;}·· print "Адрес сервера (none нет) \t[$server]";· $tmp=«»; $tmp=~s/\n//;· if (length($tmp)) {$server=$tmp}·· #Сохраняем настойки в файле· if (open(FH,"»tcpspy"))· {· print FH "$local_port\n";· print FH "$remote_port\n";· print FH "$server\n";·}· close (FH);·· # 666 - особый код для Эхо-сервера· if ($server=~/none/) {$server=666;}·· #Создаем сокет для локального сервера· socket(SERVER, PF_INET, SOCK_STREAM, 6);· setsockopt(SERVER, SOL_SOCET, SO_RESEADDR,1);· $my_addr = sockaddr_in($local_port, INADDR_ANY);· bind(SERVER, $my_addr);·· #Слушаем…· listen(SERVER,1);· while(1)· {·· print "Ожидание подключения…\t\t";· #Определяем адрес клиента· $client_addr=accept(CLIENT, SERVER);· ($clint_port,$client_ip) = sockaddr_in($client_addr);· print "+OK [IP:",inet_ntoa($client_ip),"]\n";·· $one=CLIENT;·· $connect=1;·· if ($server!=666)· {# Прокси-схема с удаленным сервером· print "Соединение с узлом $server…\t";· socket(RSERVER, PF_INET(), SOCK_STREAM(),6);· connect(RSERVER, sockaddr_in($remote_port,inet_aton($server))) || die;· print "+OK\n";· $two=RSERVER;··}· else· {# Эхо-сервер· print "Установка эхосервера…\t\t+OK\n";· $two=CLIENT;·}·· $x='foo';· open(LOG,"»tcpspy.log");· #Обработка текущего подключения· while($connect)· {· $rin='';· vec($rin, fileno($one),1)=1;· $timeout=5;· $nfound=select($rout = $rin, undef, undef, $timeout);· if (vec($rout, fileno($one),1))· {· #Слушаем ответ клиента· recv($one,$x,10000,0);· if (!length($x)) {$connect=0;}· else· {·· if ($x=~/#HALT_OFF/) {send($two,"HANDUP",0);die;}· print "$one$x";· print LOG "$one$x";· #Говорим это серверу· send($two,"$x",0);·}·}· else· {#Меняем сервера с клиентом· ($one,$two) = ($two,$one);·}·}· print "\n-ERR:Соединение разорвано\n";· close(CLIENT);· close(RSERVER);· close(LOG);·}· __END__·:end
Перейти на страницу:

Похожие книги