=) ну бля я хочу ethernet чат написать, типа как виндовый vypress, так вот я посылаю месадж на INADDR_BROADCAST с партом таким то и там мне черти ответить должны=) андарстэнд? ну может я плохо выразился в силу моих скромных знаниях об TCP/IP ps: я только что вышел из сетевога маркетинга - жуткое говно, поэтому буду знания подтягивать - компы это рулез=)
Isis IP_ONESBCAST не имеет мой perl, да и в socket.h там нет. У стивенсана прочел что этот пораметр сокета который позволяет установить ядром широковещательный адрес равный 255.255.255.255, но я его и так устанавливаю.
Разобрался, все бонально просто, но есть еще пару вопросов. Этот скрипт рассылает пакеты - работает Code: #!/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: $@"; } Этот скрипт принимает бродкаст Code: #!/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 скрипта? Code: #!/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.