Задача: в сети живет сервер (возможно, что и не один), о котором известно, что если он поймает на определенный порт широковещательный запрос, то обязательно ответит отправителю. Нужно послать такой запрос и получить список всех ответивших серверов. Желательна реализация на Perl'e.Вот такой кусок кода:
<---
$sock = IO::Socket::INET->new(Proto => 'udp',
Broadcast => 1,
LocalPort => $srcport,
PeerPort => $dstport,
PeerAddr => inet_ntoa(INADDR_BROADCAST)
) or die "sender socket: $@\n";
$sock->send($msg) or die "send: $!";
--->
шлет broadcast запрос. В сниффере (ethereal) я вижу приходящий ответ... Но вот поймать его никак не получается... И сразу встает вопрос: если этих ответов будет несколько, что делать? Спасибо.
>Задача: в сети живет сервер (возможно, что и не один), о котором
>известно, что если он поймает на определенный порт широковещательный запрос, то
>обязательно ответит отправителю. Нужно послать такой запрос и получить список всех
>ответивших серверов. Желательна реализация на Perl'e.
>
>Вот такой кусок кода:
><---
>$sock = IO::Socket::INET->new(Proto => 'udp',
> Broadcast => 1,
> LocalPort => $srcport,
> PeerPort => $dstport,
> PeerAddr => inet_ntoa(INADDR_BROADCAST)
>
>
> ) or die "sender
>socket: $@\n";
>$sock->send($msg) or die "send: $!";
>--->
>шлет broadcast запрос. В сниффере (ethereal) я вижу приходящий ответ... Но вот
>поймать его никак не получается... И сразу встает вопрос: если этих
>ответов будет несколько, что делать? Спасибо.
в perl cookbook есть пример сервера udp
>в perl cookbook есть пример сервера udpну хорошо (про пример я есс-но знаю)... пишу я дальше следующее:
<---
$sock->close();$sock = IO::Socket::INET->new(LocalPort => $srcport, Proto => 'udp')
or die "socket: $@";while ($sock->recv($msg, $maxlen)) {
my ($port, $ipaddr) = sockaddr_in($sock->peername);
my $ip = inet_ntoa($ipaddr);
print "$ip\n";
}
--->
...и ничего не принимаю... хотя в сниффере пакетов только летают. почему?
Переформулирую вопрос. Мне нужно очень примитивную вещь реальзовать (все равно на чем на самом деле, но лучше на c или perl), создать сервер слушающий по порту NNNN, послать broadcast сообщение, принять все ответы и определить кто-же (ip) ответил. Все. Неужели никто не делал?