Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/perl -w
- use strict;
- use warnings;
- use Net::TFTP;
- use Net::Ping;
- use Data::Dumper;
- use FileHandle;
- my $filename = $ARGV[0];
- my $lastlogping = $ARGV[1];
- usage() unless $filename;
- usage() unless $lastlogping;
- my $RESEAU;
- my $IP;
- my $tftp;
- my $port = 69;
- my %state;
- my $state;
- my $ip;
- my $ping;
- my $alive;
- my $sock;
- my %alive;
- my $pingerping;
- my $pingersocktftp;
- my $i;
- my $scalarlocaltime;
- my @map;
- autoflush STDOUT 1;
- for ($RESEAU = 2; $RESEAU <= 210; $RESEAU=$RESEAU+1)
- {
- for ($IP = 2; $IP < 255; $IP = $IP+1)
- {
- if ("10.36.".$RESEAU.".".$IP)
- {
- $scalarlocaltime = scalar localtime;
- my $p = Net::Ping->new('udp');
- print "\nPinging host 10.36.$RESEAU.$IP\n";
- if ($p->ping("10.36.$RESEAU.$IP"),1) {
- ## If we didn't know it was up, spew that out now..
- $pingerping = 1; $pingersocktftp = 0;
- print "10.36.$RESEAU.$IP\twas up at ", scalar localtime, "\n" unless $state{$scalarlocaltime}{$pingerping}{$pingersocktftp}{10.36.$RESEAU.$IP};
- ## Update the number of times we've seen it up
- $state{$scalarlocaltime}{$pingerping}{$pingersocktftp}{10.36.$RESEAU.$IP}++;
- ## And let STDOUT know about it, too.
- ##print "alive $scalarlocaltime $pingerping $pingersocktftp 10.36.$RESEAU.$IP time";
- }
- my$sock=IO::Socket::INET->new(
- PeerAddr=>"10.36.$RESEAU.$IP",
- PeerPort=>"$port",
- Proto=>"tcp",
- Timeout=>"5")
- or warn "Cannot connect port 69 to 10.36.$RESEAU.$IP\n";
- if (defined $sock) {
- $pingersocktftp = 1;
- }
- ## Update the number of times we've seen it up
- $state{$scalarlocaltime}{$pingerping}{$pingersocktftp}{10.36.$RESEAU.$IP}++;
- ## And let STDOUT know about it, too.
- ##print " alive ($pingerping $pingersocktftp 10.36.$RESEAU.$IP",scalar localtime;
- $state{$scalarlocaltime}{$pingerping}{$pingersocktftp}{alive} = "10.36.$RESEAU.$IP";
- ##make log map
- @map = map { $_ => ${state{$_}{$_}{$_}{$_}}} %state;
- my $fh = FileHandle->new($lastlogping , "a");
- if (defined($fh)){
- print $fh " alive $scalarlocaltime $pingerping $pingersocktftp 10.36.$RESEAU.$IP time\n";
- undef $fh;
- }
- if (defined ($sock )){
- $tftp = Net::TFTP->new("10.36.$RESEAU.$IP", BlockSize => 1024)
- or warn "cannot connect tftp serveur\n";
- ## Update the number of times we've seen it up
- $state{$scalarlocaltime}{$pingerping}{$pingersocktftp}{10.36.$RESEAU.$IP}++;
- ## And let STDOUT know about it, too.
- print "$state $scalarlocaltime $pingerping $pingersocktftp 10.36.$RESEAU.$IP transfert start";
- $tftp->binary;
- $tftp->put($filename,$filename);
- }
- }
- }
- }
- sub usage {
- ## HERE documents are your friend for this kind of thing:
- print <<"EO_USAGE";
- This program scans a C-class subnet and lists
- all machines, before with a udp ping after with a simple nmap scan
- and last try to upload via a client tftp
- You can also use this program to sort the output.
- Usage: perl $0 <file_to_transfer> <log_file_ping_ip>
- EO_USAGE
- exit;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement