Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Системное программирование > запись данных из СОКЕТА в файл.


Автор: DiverD 2.2.2006, 19:30
Хочу сделать следущее => скрипт открывает порт и слушает его.мне нужна все записывать в файл что попадает на этот порт,т.e. все покеты которые будут на него посланы будь то конект telnet-oм или сканирование портов метадом connect.
что мне нужна для этога?понимаю что сокеты использовать (может ошибаюсь еще до сетевога кодинга не дошел),куда копать?

Автор: korob2001 3.2.2006, 07:21
Посмотри эту тему:

http://forum.vingrad.ru/index.php?showtopic=82300

Может поможет.

Автор: sharq 3.2.2006, 11:24
diverd
плюс можешь почитать книгу по Сетевому программирования на perl (Л. Штайн) и Рецепты.

smile

Автор: Nookiem 10.3.2006, 09:57
Попробывал программу сервера под WindowsXP, почему-то она не хочет открывать порт для прослушки, почему не пойму, не могли бы вы написать причину этого?

Автор: korob2001 10.3.2006, 10:23
Какую ошибку пишет? Вот эта строка:
Код

socket(SERVER, AF_INET, SOCK_STREAM, $prot) or die "Can't start server at port '$port': $!\n";

в STDERR должна вывести сообщение об ошибке. Это сообщение в студию.

Автор: Nookie 11.3.2006, 09:52
Выдает типо Unknow Error, не знаю что делать, ему же нет разницы какой порт, даже стандартный который там стоит 6666 не подходит!
Добавлено @ 09:53
и еще хочу спросить, можно ли найти книгу про сетевое программирование в электронном виде????

Жду новостеЙ!

Автор: korob2001 11.3.2006, 12:29
open port 455, я так понимаю ты пытаешься открыть этот порт? Если да, то попробуй заюзать номер порта больше 2000, потому как система резервирует номера портов под свои нужды и не рекомендуется юзать номера портов с меньшим числом.
И отключи FireWall

Автор: nitr 11.3.2006, 14:44
Практически говоря, запрещено ниже 2000 порта smile Т.к. считается что они зарезирвированы, если ты это знал, то следует, что ты пишешь троянца, и прикрываешься портом 455, очень похожего на системный (в винде) 445 ;) . За оффтоп, извините smile

Автор: Nookie 13.3.2006, 11:30
Вот этого не надо, не пишу я никакого трояна, я просто хочу разобраться в чем дело! FireWall'a у меня нет, а порты больше 2000 также не открываются, что делать не знаю! подскажите!

Автор: Lat1n0S 14.3.2006, 11:01
Цитата

и еще хочу спросить, можно ли найти книгу про сетевое программирование в электронном виде????

http://poizon.net.ru/downloads/perl/ebook/Programming_The_Network_With_Perl.pdf

Автор: korob2001 15.3.2006, 13:26
Ты клиенту свой ip передаёшь при запуске? Вобщем сохрани клиент на винте:
Код

#!/usr/bin/perl -w
use strict;
use Socket qw(:DEFAULT :crlf);
use IO::Handle;

my $host = shift || "192.168.1.100";
my $port = shift || 6666;

my $pack_addr = gethostbyname($host);
my $proto     = getprotobyname('tcp');
my $dest      = sockaddr_in($port, $pack_addr);

socket(SOCK, PF_INET, SOCK_STREAM, $proto) or die "Can't create socket: $!\n";
connect(SOCK, $dest) or die "Can't connect to '$host' at port '$port': $!\n";
print <SOCK>;
close(SOCK);
print "For exit press 'ENTER'\n";
<>;

Имя файла не имеет значения. Затем запусти файл на выполнение. У меня сейчас работает сервер, к которому ты должен подключиться этим клиентом. И еще: Что у тебя за OS? Что за Perl?

Автор: Lat1n0S 27.3.2006, 06:26
Код

#!/usr/bin/perl -w
package MyPackage;
use strict;
use vars qw(@ISA);
use Net::Server::PreFork;

@ISA = qw(Net::Server::PreFork);

MyPackage->run( port => 6666 );
exit;

sub process_request {
    my $self = shift;
    eval {

        local $SIG{ALRM} = sub { die "Timed Out!\n" };
        my $timeout = 30;

        my $previous_alarm = alarm($timeout);
        
        while (<STDIN>) {
            open(log , ">>server.log");
            print log "$var\n";
            close(log);
            alarm($timeout);
        }
        alarm($previous_alarm);

    };

    if ( $@ =~ /timed out/i ) {
        print STDOUT "Timed Out.\r\n";
        return;
    }

}

1;

Вот оно же:
http://search.cpan.org/~rhandom/Net-Server-0.93/lib/Net/Server.pm

P.S. В *nix порты меньше 1024 биндяться только под рутом.
(А под виндой резервируються,порты? если да,то меньше какого числа?)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)