URL: https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 7342
[ Назад ]

Исходное сообщение
"Perl, Net::Ping, syn"

Отправлено JIP , 29-Апр-08 17:08 
Разрабатывал сканер локалки - искал активные ftp-серверы. Скрипт корректно работал в winXP.
В GNU/Linux - этот скрипт показывает _все_ активные компы (те все включенные), а меня интересуют только хосты с включенным ftp-сервером. беда

<code>
use Net::Ping;

$p = Net::Ping->new( 'syn' );

$p->{'port_num'} = getservbyname( 'ftp', 'tcp' );

$p->ping( $host, 1 );

if ( ( $host, $rtt, $ip ) = $p->ack ){ print "$host\n" }
</code>


Содержание

Сообщения в этом обсуждении
"Perl, Net::Ping, syn"
Отправлено pheonix , 29-Апр-08 18:57 
дак ты туда заломись вот так

#!/usr/bin/perl
  use Net::FTP;

    $hostname = $ARGV[0];
    $username = 'anonymous';
    $password = 'no@mail.ru';

    $ftp = Net::FTP->new($hostname, Debug => 0)
    or die"Can't connect $@";
#    $ftp->login($username, $password)
#    or die $ftp->message;
    $ftp->quit();


"Perl, Net::Ping, syn"
Отправлено JIP , 29-Апр-08 20:02 
>дак ты туда заломись вот так
>

в этом случае всплывает проблема с таймаутом у виндового эктивперла - приходится долго ждать ответа если сервер оффлайн. еще можно сокет создавать - аналогичная проблема с таймаутом.


"Perl, Net::Ping, syn"
Отправлено pheonix , 29-Апр-08 20:24 
>>дак ты туда заломись вот так
>>
>
>в этом случае всплывает проблема с таймаутом у виндового эктивперла - приходится
>долго ждать ответа если сервер оффлайн. еще можно сокет создавать -
>аналогичная проблема с таймаутом.

какие проблемы выставь Timeout в 3 секунды и не мучайся


"Perl, Net::Ping, syn"
Отправлено JIP , 30-Апр-08 10:57 
>>>дак ты туда заломись вот так
>>>
>>
>>в этом случае всплывает проблема с таймаутом у виндового эктивперла - приходится
>>долго ждать ответа если сервер оффлайн. еще можно сокет создавать -
>>аналогичная проблема с таймаутом.
>
>какие проблемы выставь Timeout в 3 секунды и не мучайся

таймаут включал. этот функционал неработоспособен как для модуля Net::FTP так и для сокетов (эктивперл) - приходится ждать 10-15 секунд (возможно это дефолтный таймаут)



"Perl, Net::Ping, syn"
Отправлено anonymous , 30-Апр-08 02:10 
Может подойдёт лучше стандартное nmap -sT -p 21 192.168.25.0/24 ?

"Perl, Net::Ping, syn"
Отправлено JIP , 30-Апр-08 10:59 
>Может подойдёт лучше стандартное nmap -sT -p 21 192.168.25.0/24 ?

этот вариант был опробован и использовался некоторое время. отказался от него по причине плохой переносимости - юзеру прийдется ставить nmap и тд и тп


"Perl, Net::Ping, syn"
Отправлено phpcoder , 30-Апр-08 12:39 
>>Может подойдёт лучше стандартное nmap -sT -p 21 192.168.25.0/24 ?
>
>этот вариант был опробован и использовался некоторое время. отказался от него по
>причине плохой переносимости - юзеру прийдется ставить nmap и тд и
>тп

Ну ActivePerl, тоже на в каждой Windows установлен и ставить его придётся пользователю.

P.S. И вообще тут "программирование под UNIX" вроде как..



"Perl, Net::Ping, syn"
Отправлено JIP , 30-Апр-08 16:11 
>>>Может подойдёт лучше стандартное nmap -sT -p 21 192.168.25.0/24 ?
>>
>>этот вариант был опробован и использовался некоторое время. отказался от него по
>>причине плохой переносимости - юзеру прийдется ставить nmap и тд и
>>тп
>
>Ну ActivePerl, тоже на в каждой Windows установлен и ставить его придётся
>пользователю.
>
>P.S. И вообще тут "программирование под UNIX" вроде как..

написал многопоточный сканер с Net::Ping - вроде корректно работает. средств Perl'а оказалось достаточно :)



"Perl, Net::Ping, syn"
Отправлено NuINu , 30-Апр-08 09:40 
>[оверквотинг удален]
>use Net::Ping;
>
>$p = Net::Ping->new( 'syn' );
>
>$p->{'port_num'} = getservbyname( 'ftp', 'tcp' );
>
>$p->ping( $host, 1 );
>
>if ( ( $host, $rtt, $ip ) = $p->ack ){ print "$host\n" }
></code>

Добавь:
$p->service_check(1);
после конструктора


"Perl, Net::Ping, syn"
Отправлено JIP , 30-Апр-08 11:17 
>[оверквотинг удален]
>>$p->{'port_num'} = getservbyname( 'ftp', 'tcp' );
>>
>>$p->ping( $host, 1 );
>>
>>if ( ( $host, $rtt, $ip ) = $p->ack ){ print "$host\n" }
>></code>
>
>Добавь:
>$p->service_check(1);
>после конструктора

вот теперь корректно работает. огромное спасибо. всетаки надо внимательно Description читать :(


"Perl, Net::Ping, syn"
Отправлено pheonix , 30-Апр-08 18:43 
>[оверквотинг удален]
>>>
>>>if ( ( $host, $rtt, $ip ) = $p->ack ){ print "$host\n" }
>>></code>
>>
>>Добавь:
>>$p->service_check(1);
>>после конструктора
>
>вот теперь корректно работает. огромное спасибо. всетаки надо внимательно Description читать :(
>

у меня именно для этих же целей и прекрасно работает всё что написал я именно