#!/usr/bin/perl use Socket; my $dest_addr = @ARGV[0]; my $dest_port = 21332; my $source_ip_addr = "0.0.0.0"; # (ie, myself) #my $source_ip_addr = "192.168.1.7"; # Doesn't matter whether I use 0.0.0.0 or my actual IP my $source_port = 21573; my $synpacket = "TESTTESTTESTt"; # Obviously this isn't a real SYN packet # Delete the trailing lower case "t" and it works fine... @source_addr_octets = split('\.', $source_ip_addr); @dest_addr_octets = split('\.', $dest_addr); my $mc_source_port = inet_aton($source_port); my $count = 0; $count = 0; undef $mc_dest_addr; until ($count == scalar(@dest_addr_octets)) { print "\n$count:$dest_addr_octets[$count]"; $mc_dest_addr .= inet_aton($dest_addr_octets[$count]); $count++; } $count = 0; $mc_destination = $dest_port; $mc_destination .= $mc_dest_addr; print "\n socketing..."; print "\n"; $sockfd = socket (SOCKET, AF_INET, SOCK_RAW, 6) or die "\n\n *** CAN'T SOCKET! We root? Error:$! Sys:$@ *** \n \$source_port:$source_port \$dest_port:$dest_port\n"; #$sockfd = socket (SOCKET, AF_INET, SOCK_RAW, 17) or die "\n\n *** CAN'T SOCKET! We root? Error:$! Sys:$@ *** \n \$source_port:$source_port \$dest_port:$dest_port\n"; $|=1; my $broadcastAddr; my $custom_remote_host = inet_aton($dest_addr); print STDOUT "\n remote_host:$dest_addr. \t remote_port:$dest_port"; my $response = $broadcastAddr = sockaddr_in($dest_port, $custom_remote_host); setsockopt(SOCKET, SOL_SOCKET, SO_SNDBUF, 16384) or die "\n\n *** Can't setsockopt on SO_SNDBUF! We root? Error:$! Sys:$@ *** \n\n"; $num_of_bytes = length($synpacket); $mc_destination = pack('Sna4x8', AF_INET, $dest_port, $dest_addr); my $server_port; my $machine_code_addr = sockaddr_in($server_port, INADDR_ANY); bind (SOCKET, $machine_code_addr) or die "\n\n Couldn't bind $machine_code_addr. Error:$! \n\n"; # Program WILL NOT SEND anything longer than 12 bytes. # Try and you get an "Operation not supported" error! $num_of_bytes = length ($synpacket); print STDOUT "\n Packet to be sent:$synpacket"; print STDOUT "\n num_of_bytes:$num_of_bytes"; print STDOUT "\n"; print STDOUT "\n PRESS ENTER TO START!"; print STDOUT "\n"; my $nothing = ; print STDOUT "\n"; for ($count == 0; $count < 35535; $count++) { $result = send( SOCKET, $synpacket, $num_of_bytes, $broadcastAddr ); #$result = syswrite(SOCKET, $synpacket, $num_of_bytes); # Gives "Destination address required" error print STDOUT "\n count:$count ** Result:$result Error:$! Sys:$@ ** "; } print STDOUT "\n"; print STDOUT " ***********************\n * FINAL COUNT: $count * \n **********************\n"; print STDOUT "\n Result (bytes sent):$result Error:$! System:$@"; print STDOUT "\n"; close (SOCKET); print "\n "; print "\n Socket closed."; print "\n"; die;