| @@ -0,0 +1,75 @@ | |||
| #!/usr/bin/perl | |||
| use strict; | |||
| use warnings; | |||
| my($maccnt, $pps, $src, $dest) = @ARGV; | |||
| usage() if !defined $dest; | |||
| if ( $maccnt !~ /^\d+$/ || $maccnt < 1 ) { | |||
| print STDERR "MAC count must be a positive integer\n"; | |||
| exit 1; | |||
| } | |||
| if ( $pps !~ /^\d+$/ || $pps < 1 ) { | |||
| print STDERR "packets/sec must be a positive integer\n"; | |||
| exit 1; | |||
| } | |||
| if ( $src !~ /^(\d+\.\d+\.\d+\.\d+)$/ ) { | |||
| print STDERR "source IP must be a valid IPv4 address\n"; | |||
| exit 1; | |||
| } | |||
| if ( $dest !~ /^(\d+\.\d+\.\d+\.\d+)$/ ) { | |||
| print STDERR "destination IP must be a valid IPv4 address\n"; | |||
| exit 1; | |||
| } | |||
| main($maccnt, $pps, $src, $dest); | |||
| sub usage { | |||
| print STDERR "DHCP Flood using option 82\n"; | |||
| print STDERR "This is only to test dhcp_protect, the DHCP packets aren't really valid\n"; | |||
| print STDERR "DO NOT SEND THIS TO YOUR DHCP SERVER !!!!\n"; | |||
| print STDERR "\n"; | |||
| print STDERR "Usage: $0 <MAC count> <packets/sec> <source IPv4> <destination IPv4>\n"; | |||
| print STDERR "Dependency: nemesis must be installed\n"; | |||
| print STDERR "https://ftp.troglobit.com/nemesis/\n"; | |||
| print STDERR "\n"; | |||
| exit 1; | |||
| } | |||
| sub main { | |||
| my($maccnt, $pps, $src, $dest)=@_; | |||
| my $hdr = ""; | |||
| $hdr .= "010106010c02385600010000000000000000000000000000c16e5f43409c28db"; | |||
| $hdr .= "d56c000000000000000000000000000000000000000000000000000000000000"; | |||
| $hdr .= "0000000000000000000000000000000000000000000000000000000000000000"; | |||
| $hdr .= "0000000000000000000000000000000000000000000000000000000000000000"; | |||
| $hdr .= "0000000000000000000000000000000000000000000000000000000000000000"; | |||
| $hdr .= "0000000000000000000000000000000000000000000000000000000000000000"; | |||
| $hdr .= "0000000000000000000000000000000000000000000000000000000000000000"; | |||
| $hdr .= "000000000000000000000000638253633501013707017903060f77fc390205dc"; | |||
| $hdr .= "3d0701409c28dbd56c33040076a7000c097370616c6569666f6e000000000000"; | |||
| $hdr .= "0000000000000000000000520e0104000000000206XXXXXXXXXXXXff00000000"; | |||
| my $int = 1/$pps; | |||
| while(1) { | |||
| for(my $i=0; $i<$maccnt; $i++) { | |||
| my $mac = sprintf("000000%06x", $i); | |||
| my $pkt = $hdr; | |||
| $pkt =~ s/XXXXXXXXXXXX/$mac/; | |||
| open(N,"| nemesis udp -S $src -D $dest -x 67 -y 666 -i $int -P -") || die "install nemesis!"; | |||
| print N pack("H*",$pkt); | |||
| print N ""; | |||
| close(N); | |||
| } | |||
| } | |||
| } | |||