ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > PHP, PERL, MySQL, JavaScript
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

Учёт трафика на perl
  #1  
Старый 07.09.2007, 21:26
Аватар для Духъ
Духъ
Участник форума
Регистрация: 03.09.2007
Сообщений: 119
Провел на форуме:
425358

Репутация: 21
Отправить сообщение для Духъ с помощью ICQ
По умолчанию Учёт трафика на perl

С недавнего времени начал кодить на perl, но как всегда возник вопрос: возможно ли учитывать трафик срествами perl в виндовс, трафик проходит через прокси. Прокси тоже написан на perl.
 
Ответить с цитированием

  #2  
Старый 07.09.2007, 21:57
Аватар для Talisman
Talisman
Постоянный
Регистрация: 22.04.2006
Сообщений: 566
Провел на форуме:
1325772

Репутация: 517


Отправить сообщение для Talisman с помощью ICQ
По умолчанию

епть.... сорцы проксика то дай он 100% в своем нутре считает траф, чтобы пакеты не "рвать" и ждать конца. ищи эту функцию по примерному называнию, возможному названию.
 
Ответить с цитированием

  #3  
Старый 07.09.2007, 22:10
Аватар для Духъ
Духъ
Участник форума
Регистрация: 03.09.2007
Сообщений: 119
Провел на форуме:
425358

Репутация: 21
Отправить сообщение для Духъ с помощью ICQ
По умолчанию

вот сорцы, сразу говорю писал не я

Код:
#!usr/bin/perl

use Socket;

my $port = 4444;

my $protocol = getprotobyname('tcp');
my $my_addr  = sockaddr_in ($port, INADDR_ANY);

socket (SOCK, AF_INET, SOCK_STREAM, $protocol) or die "socket(): $!";
setsockopt (SOCK, SOL_SOCKET, SO_REUSEADDR,1 ) or die "setsockopt(): $!";
bind (SOCK, $my_addr) or die "bind(): $!";
listen (SOCK, SOMAXCONN) or die "listen(): $!";

$SIG{'INT'} = sub {
	print " terminate process\n";
	close (SOCK);
	exit;
};

warn "Џ® агббЄЁ §*ЇгбЄ Їа®ЄбЁ: HTTP Proxy started on port $port\n";

while (1) {
	next unless my $remote_addr = accept (SESSION, SOCK);

	my ($fist, $method, $remote_host, $remote_port) = analyze_request();

	if (open_connection (REMOTE, $remote_host, $remote_port) == 0) {
		# ....
		print "Couldnt connect";
		close (SESSION);
		next;
	}

	print REMOTE $first;
	print REMOTE "User-Agent: Googlebot/2.1 (+http://www.google.com/bot.html)\n";

	while (<SESSION>) {
        next if (/Proxy-Connection:/ || /User-Agent:/);
        
		print REMOTE $_;

        last if ($_ =~ /^[\s\x00]*$/);
    }

    print REMOTE "\n";
	$header = 1;

    while (<REMOTE>) {
        print SESSION $_;
		
		if ($header) {     
            if ($header && $_ =~ /^[\s\x00]*$/) {
                $header = 0;
            }
        }

    }

	close (REMOTE);
	close (SESSION);
}

close (SOCK);


sub analyze_request {
	my ($fist, $url, $remote_host, $remote_port, $method);

    $first = <SESSION>;
    $url = ($first =~ m|(http://\S+)|)[0];
    print " Request for URL:  $url \n";

    ($method, $remote_host, $remote_port) = 
        ($first =~ m!(GET) http://([^/:]+):?(\d*)! );
    
	# bad request
    if (!$remote_host) {
        close(SESSION);
		exit;
    }

	$remote_port = "http" unless ($remote_port);
    $first =~ s/http:\/\/[^\/]+//;
    return ($first, $method, $remote_host, $remote_port);
}

# arg : SOCKET, host, port
sub open_connection {
	my ($host, $port) = @_[1,2];
	my ($dest_addr, $cur);

	if ($port !~ /^\d+$/) {
        $port = (getservbyname($port, "tcp"))[2];
        $port = 80 unless ($port);
    }

	$host = inet_aton ($host) or return 0;
	$dest_addr = sockaddr_in ($port, $host);

	socket ($_[0], AF_INET, SOCK_STREAM, $protocol) or die "socket() : $!";
	connect ($_[0], $dest_addr) or return 0;

	$cur = select($_[0]);  
    $| = 1;                       
    select($cur);

	return 1;
}
 
Ответить с цитированием

  #4  
Старый 08.09.2007, 12:34
Аватар для C!klodoL
C!klodoL
Постоянный
Регистрация: 05.06.2007
Сообщений: 335
Провел на форуме:
4319431

Репутация: 677
По умолчанию

вообще можно считать входящие и исходящие данные функцией length и складывать, а вообще посмотри тут http://search.cpan.org/search?query=traffic&mode=all может что из модулей подойдёт
 
Ответить с цитированием

  #5  
Старый 08.09.2007, 14:36
Аватар для genom--
genom--
Постоянный
Регистрация: 09.07.2006
Сообщений: 937
Провел на форуме:
1948091

Репутация: 1686


По умолчанию

ну впринципе C!klodoL правильно сказал считать длину данных и бампить в файл в таком виде каком тебе это удобно -- ток зачем немогу понять
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Books Perl FRAGNATIC PHP, PERL, MySQL, JavaScript 0 11.08.2005 16:58
Безопасность приложений на Perl k00p3r Чужие Статьи 0 12.06.2005 09:39



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ