#!/opt/net/GNU/bin/perl -w # # sends numbered UDP datagrams to a remote host. # # Usage: # udp-send [-n ] # [-s ] # [-p ] # host # # defaults to 16, to 32 # and to 9870. # # Renaud Waldura # on Sep 18 16:51:24 1995 # require 'getopts.pl'; ## parse options &Getopts('n:s:p:') || die "Usage: $0 [-n ] [-s ] [-p ] host\n"; $opt_n = 16 unless $opt_n; $opt_s = 32 unless $opt_s; $opt_p = 9870 unless $opt_p; ($datagrams_number, $datagrams_size, $port) = ($opt_n, $opt_s, $opt_p); $host = $ARGV[0]; die "Usage: $0 [-n ] [-s ] [-p ] host\n" unless $host; ## create a UDP socket $sockaddr = 'S n a4 x8'; # magic $family = 2; # AF_INET (system dependent !) $socktype = 1; # SOCK_DGRA (system dependent !) chop($hostname = `/usr/ucb/hostname`); #$hostname = "zork"; ($name, $aliases, $proto) = getprotobyname('udp'); ($name, $aliases, $type, $len, $my_addr ) = gethostbyname($hostname); print "gethostbyname($hostname) returns $name, $aliases, ...\n"; ($name, $aliases, $type, $len, $peer_addr) = gethostbyname($host); print "gethostbyname($host) returns $name, $aliases, ...\n"; $me = pack($sockaddr, $family, 0, $my_addr); $peer = pack($sockaddr, $family, $port, $peer_addr); # make the socket and bind it to the protocol socket(S, $family, $socktype, $proto) || die "Unable to create socket: $!"; bind(S, $me) || die "Unable to bind socket: $!"; ## send numbered datagrams foreach $n (1..$datagrams_number) { $datagram = '*' x $datagrams_size . ":$n"; send(S, $datagram, 0, $peer) || warn "Couldn't send: $!"; print "Sent datagram $n, length = ", length($datagram), "\n"; sleep(1); } ## die close(S);