Разрабатывал сканер локалки - искал активные 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>
дак ты туда заломись вот так#!/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();
>дак ты туда заломись вот так
>в этом случае всплывает проблема с таймаутом у виндового эктивперла - приходится долго ждать ответа если сервер оффлайн. еще можно сокет создавать - аналогичная проблема с таймаутом.
>>дак ты туда заломись вот так
>>
>
>в этом случае всплывает проблема с таймаутом у виндового эктивперла - приходится
>долго ждать ответа если сервер оффлайн. еще можно сокет создавать -
>аналогичная проблема с таймаутом.какие проблемы выставь Timeout в 3 секунды и не мучайся
>>>дак ты туда заломись вот так
>>>
>>
>>в этом случае всплывает проблема с таймаутом у виндового эктивперла - приходится
>>долго ждать ответа если сервер оффлайн. еще можно сокет создавать -
>>аналогичная проблема с таймаутом.
>
>какие проблемы выставь Timeout в 3 секунды и не мучайсятаймаут включал. этот функционал неработоспособен как для модуля Net::FTP так и для сокетов (эктивперл) - приходится ждать 10-15 секунд (возможно это дефолтный таймаут)
Может подойдёт лучше стандартное nmap -sT -p 21 192.168.25.0/24 ?
>Может подойдёт лучше стандартное nmap -sT -p 21 192.168.25.0/24 ?этот вариант был опробован и использовался некоторое время. отказался от него по причине плохой переносимости - юзеру прийдется ставить nmap и тд и тп
>>Может подойдёт лучше стандартное nmap -sT -p 21 192.168.25.0/24 ?
>
>этот вариант был опробован и использовался некоторое время. отказался от него по
>причине плохой переносимости - юзеру прийдется ставить nmap и тд и
>тпНу ActivePerl, тоже на в каждой Windows установлен и ставить его придётся пользователю.
P.S. И вообще тут "программирование под UNIX" вроде как..
>>>Может подойдёт лучше стандартное nmap -sT -p 21 192.168.25.0/24 ?
>>
>>этот вариант был опробован и использовался некоторое время. отказался от него по
>>причине плохой переносимости - юзеру прийдется ставить nmap и тд и
>>тп
>
>Ну ActivePerl, тоже на в каждой Windows установлен и ставить его придётся
>пользователю.
>
>P.S. И вообще тут "программирование под UNIX" вроде как..написал многопоточный сканер с Net::Ping - вроде корректно работает. средств Perl'а оказалось достаточно :)
>[оверквотинг удален]
>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);
после конструктора
>[оверквотинг удален]
>>$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 читать :(
>[оверквотинг удален]
>>>
>>>if ( ( $host, $rtt, $ip ) = $p->ack ){ print "$host\n" }
>>></code>
>>
>>Добавь:
>>$p->service_check(1);
>>после конструктора
>
>вот теперь корректно работает. огромное спасибо. всетаки надо внимательно Description читать :(
>у меня именно для этих же целей и прекрасно работает всё что написал я именно