Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: разработка для Web > запрос к whois (на 43 порту) через AnyEvent


Автор: djusha 1.7.2011, 15:20
Привет всем!
Каким образом сделать запрос к whois (на 43 порту) через AnyEvent?

например, адрес whois сервера: whois.crsnic.net
нужно получить whois информацию о домене yahoo.com

Если можно, простой рабочий пример...

Спасибо!

Автор: DurRandir 1.7.2011, 17:22
Разберитесь, как работает протокол whois (это очень, очень, очень простой протокол).

Автор: djusha 1.7.2011, 21:11
Цитата(DurRandir @ 1.7.2011,  17:22)
Разберитесь, как работает протокол whois (это очень, очень, очень простой протокол).

да вот как то не получается разобратся... иначе не спрашивал бы...

 POST или GET запросы ?

какие параметры уходят к whois серверу?

Автор: vadiml 1.7.2011, 23:23
Думаю как работает telnet Вы знаете:
[vadim@vadiml ~]$ telnet whois.ripn.net 43
Trying 212.193.111.1...
Connected to whois.ripn.net.
Escape character is '^]'.
vingrad.ru                                                                 <------------ это я ввёл ручками
% By submitting a query to RIPN's Whois Service
% you agree to abide by the following terms of use:
% http://www.ripn.net/about/servpol.html#3.2 (in Russian) 
% http://www.ripn.net/about/en/servpol.html#3.2 (in English).

domain:     VINGRAD.RU
nserver:    ns1.vingrad.com.
nserver:    ns2.vingrad.com.
state:      REGISTERED, DELEGATED, UNVERIFIED
person:     Private Person
e-mail:     vova@vingrad.com
registrar:  REGTIME-REG-RIPN
created:    2000.09.13
paid-till:  2011.09.14
source:     TCI

Last updated on 2011.07.02 00:20:46 MSK/MSD

Connection closed by foreign host.


Автор: djusha 2.7.2011, 06:55
причем здесь телнет... да... я знаю как это там работает.

есть даже рабочий код/пример на IO::Socket

Код

use IO::Socket;

my $dName = 'hdd-repair.com';
my $socket;

while ( ! ($socket = IO::Socket::INET->new("whois.crsnic.net:43") ) ) {
  print ("Not connected: $!\nSleep 1 sec\n");
  sleep 1;
}
unless ($socket) {print "error";}
$socket->autoflush(1);

print $socket  "domain $dName\r\n";
my @rz = <$socket>; close $socket;
print @rz;


но вот как это переделать на AnyEvent уже который день не доходит....

Автор: shamber 2.7.2011, 16:39
Цитата(djusha @  1.7.2011,  21:11 Найти цитируемый пост)
 POST или GET запросы ?

а с чего вы взяли, что нужно использовать их?

Добавлено через 7 минут и 37 секунд
Может лучше AnyEvent::Socket?

Автор: djusha 6.7.2011, 23:12
Цитата(shamber @ 2.7.2011,  16:39)
Цитата(djusha @  1.7.2011,  21:11 Найти цитируемый пост)
 POST или GET запросы ?

а с чего вы взяли, что нужно использовать их?

Добавлено @ 16:46
Может лучше AnyEvent::Socket?

так AnyEvent::Socket и мучию.

сейчас пример нашел, http://www.ni-al.ru/index.php/Perl::AnyEvent::Net
чутка доделал, вроде работает....

другой вопрос... как AnyEvent::Socket заставить посылать запросы к whois серверу с разных IP адресов сервера...

в AnyEvent::HTTP это делается добавлением   
Код

on_prepare => sub { bind($_[0], ....


а как поступить с AnyEvent::Socket ?

Автор: djusha 6.7.2011, 23:28
и еще, как установить в AnyEvent::Socket количество одновременно работающих потоков?

Автор: djusha 9.7.2011, 13:20
Цитата(djusha @ 6.7.2011,  23:28)
и еще, как установить в AnyEvent::Socket количество одновременно работающих потоков?

в документации к AnyEvent::Socket сказано:
Код

=item $sa = AnyEvent::Socket::pack_sockaddr $service, $host

Pack the given port/host combination into a binary sockaddr
structure. Handles both IPv4 and IPv6 host addresses, as well as UNIX
domain sockets (C<$host> == C<unix/> and C<$service> == absolute
pathname).

Example:

   my $bind = AnyEvent::Socket::pack_sockaddr 43, v195.234.53.120;
   bind $socket, $bind
      or die "bind: $!";


от куда взять цокет $socket ?

сам скрипт по примеру http://www.ni-al.ru/index.php/Perl::AnyEvent::Net работает

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