On Wed, Apr 18, 2001 at 03:25:09AM -0700, Paul Makepeace wrote:
> Anyone hackers here sent broadcast packets? I think this is how you
> do it:
>
> #!/usr/bin/perl -w
> use strict;
>
> use Socket;
> my $dst = inet_aton("172.30.255.255");
>
> socket(SOCKET, PF_INET, SOCK_DGRAM, getprotobyname("udp"))
> or die "socket: $!";
> setsockopt(SOCKET, SOL_SOCKET, SO_BROADCAST, pack("l", 1))
> or die "setsockopt: $!";
> send(SOCKET, "hello", 0, sockaddr_in(6868, INADDR_BROADCAST))
> #send(SOCKET, "hello", 0, sockaddr_in(6868, $dst))
> or die "send: $!";
I'd agree, tho' I don't think you need to pack() the last arg to
setsockopt().
> For some reason I'm getting "send: Can't assign requested address"
> for INADDR_BROADCAST. How can it *not* assign that? Flipping the
I had a lot of fun&games with this (before LDS's book came out!):
Trying both IO::Socket and Socket.pm, I could do either read or
write but not both ... and had that msg.
My definitely working version is:
socket(SOCK, PF_INET, SOCK_DGRAM, getprotobyname('udp'))
|| die "$prog: socket: $!\n";
...
my $rip = INADDR_BROADCAST;
$rip = inet_aton($opt{d}) if defined $opt{d};
my $raddr = sockaddr_in($opt{p}, $rip);
setsockopt(SOCK, SOL_SOCKET, SO_BROADCAST, 1)
|| die "$prog: setsockopt: $!\n";
send(SOCK, $msg . "\015\012", 0, $raddr)
|| die "$prog: send: $!\n";
Which looks the same but for the pack().
--
Chris Benson