Показать сообщение отдельно

  #6  
Старый 23.02.2008, 13:10
n4n0bit
Познающий
Регистрация: 11.09.2006
Сообщений: 59
Провел на форуме:
70702

Репутация: 52
По умолчанию

Разобрался, все бонально просто, но есть еще пару вопросов.

Этот скрипт рассылает пакеты - работает
Код:
#!/usr/bin/perl
use strict;
use warnings;
use Socket;
$| = 1;
# BroadCast messager
# Default params
my $PORT = 9191;
my $ADDR = '10.17.23.255';

socket(UDP, PF_INET, SOCK_DGRAM, getprotobyname('udp')) or die "socket() failed: $@";
setsockopt(UDP, SOL_SOCKET, SO_BROADCAST, 1) or die "setsockopt() failed: $@";
my $dest = sockaddr_in($PORT,inet_aton($ADDR));

my $buff = undef;
for(my $i = 1; $i <= 9; $i++) {
	send(UDP, "NumPacket_$i", 0, $dest) or die "send() failed: $@";
}
Этот скрипт принимает бродкаст
Код:
#!/usr/bin/perl
use strict;
use warnings;

use IO::Socket::INET;
$|++;

print "Listening on UDP port: 9191\n";

my $socket = IO::Socket::INET -> new (
    LocalPort  => 9191,
    Broadcast  =>  1,
    Proto      => 'udp',
    Blocking   => 1
    )
or die "Failed to bind to socket: $@";

my $mess; 
  
while ($socket -> recv ($mess, 1024)) { print "Msg: $mess\n" }
Этот скрипт должен принимать бродкаст но он этого не делает, чем он отличается 2 скрипта?

Код:
#!/usr/bin/perl
use strict;
use warnings;
use Socket;

# server

socket(SOCK, PF_INET, SOCK_DGRAM, getprotobyname('udp')) or die "socket: $!";
setsockopt(SOCK, SOL_SOCKET, SO_BROADCAST, 1) or die "setsockopt() failed: $@";
bind(SOCK, sockaddr_in(9191, 10.17.23.32)) or die "bind: $!";
my $hisaddr = recv(SOCK, my $buff, 1024, 0);
print "[+] $hisaddr and say: $buff\n";
еще поврос, вот в 1м скрипте адрес назначения упаковывается inet_aton() а если эту упаковку делать с udp сервером, то вылазит еррор, выходит что для udp это не надо - токуа вот почему так?

Bad arg length for Socket:ack_sockaddr_in, length is 0, should be 4 at /usr/local/lib/perl5/5.8.8/mach/Socket.pm line 373.