PERL: ping and e-mail


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting PERL: ping and e-mail
# 1  
Old 03-18-2003
PERL: ping and e-mail

I need a script to open a text file with ip's in it, ping them, split the results into the ip and time from the results and e-mail them ?

here what i've done.
its porbly wrong and not workin.its for win nt4


use Net::SMTP;

# get list of ip's to ping
open (PINGFILE, "< c:\\Documents and Settings\\pinghosts.txt") or die "Can't open PingHost lsit: $!";

my @pinglist;
my $machinenumber = 0;

while ($line = <PINGFILE>) {
chomp $line;
$pinglist[$machinenumber] = $line;
$machinenumber++;
}

# now ping all machines
foreach $host (@pinglist)
{

system ("ping $host > @result");

}

#split result into name and time
foreach $reply (@results){
($reply)=split(//, $_)
};


#get list of e-mail addresses to send e-mails to
open (EMAILS, "< c:\\Documents and Settings\\emaillist.txt") or die "Can't open e-mail list: $!";

@TO = readdir EMAILS;

foreach $to (@TO){}

$from = "colinctdprep@oceanfree.net";
@body = $reply;
$subject = "PERL pinghost program report";
{

$smtp = Net::SMTP->new("icmp");
die "Could not make connection: $!" if (defined $smtp);

$smtp->mail($from);
$smtp->to($to);

$smtp->data();
$smtp->datasend("To: $to\n");
$smtp->datasend("From: $from\n");
$smtp->datasend("Subject: $subject\n");
$smtp->datasend("\n");
foreach(@body) {
$smtp->datasend("$_\n");
}
$smtp->dataend();
$smtp->quit;
}

close EMAILS;
# 2  
Old 03-18-2003
Here are some suggestions:

use Net::SMTP;

my (@pinglist, $host, @results, @TO);

# get list of ip's to ping
# using a single instead of double quote around the filename eliminates the need for \\
# the second line stores the entire file in an array automagically
# it's good to always close a file when you're done with it

open (PINGFILE, '<c:\Documents and Settings\pinghosts.txt') or die "Can't open PingHost list: $!";
@pinglist = <PINGFILE>;
close(PINGFILE);

# now ping all machines
# this scrolls through the array, but each IP address is stored in $_ intead of $host
# you can't use > to push new values into an array, so you may want to create a new text file

foreach (@pinglist) {
system("ping $_ > results.txt");
}

open (IPFILE, '<results.txt') or die "Can't open IP list: $!";
@results = <IPFILE>;
close(IPFILE);

I hope some of these are helpful suggestions.. this pretty much cuts off in the middle of your script, but I'm out of time for now

Last edited by oombera; 03-18-2003 at 05:52 PM..
# 3  
Old 03-18-2003
it just print the result on screen not into results.txt
# 4  
Old 03-19-2003
Sorry, I may be telling you wrong on that part. I don't have a computer set up to test Perl right now.. you could try pushing the result directly into the @results array:

# now ping all machines
foreach (@pinglist) {
push(@result, system("ping $_"));
}
# 5  
Old 03-22-2003
still wont work Smilie

keeps printing the results onto screen.

can you put thr results into an array lik this

foreach (@pinglist) {

system ("ping $_ \@results")
}

???
# 6  
Old 03-23-2003
The answer you needed:

perleo,

without giving you the WHOLE answer, the following code will ping each IP address in the requested file and store the results in the array @results Smilie
Code:
#!/perl/bin/perl -w

use strict;
use Net::SMTP; 

# get list of ip's to ping 
open (PINGFILE, "< c:\\pinghosts.txt") or die "Can't open PingHost list: $!"; 

my @pinglist;
my @results;
my $holder;

while (my $line = <PINGFILE>) { 
	chomp $line;
	# place the host ipaddress in the array @pinglist
	push @pinglist, $line; 
} 

# now ping all machines
foreach my $host (@pinglist) {
	# place results of ping in $holder 
	$holder = `ping $host`;
	# place contents of $holder into the array @results
	push @results, $holder; 
}

NOTE: check the location of the file to open - I changed it for testing purposes.

Let me know how it goes

Smilie
# 7  
Old 03-23-2003
works Smilie

so, how do i split the result just to print the IP and the time
e.g: 192.001.0.002 time>1ms

something like

@result=split(// , $_);

and then to print the results from the split into an array.
can you PLEASE! help me with that !
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Programming

Ping test sends mail when ping fails

help with bash script! im am working on this script to make sure my server will stay online, so i made this script.. HOSTS="192.168.138.155" COUNT=4 pingtest(){ for myhost in "$@" do ping -c "$COUNT" "$myhost" &&return 1 done return 0 } if pingtest $HOSTS #100% failed... (4 Replies)
Discussion started by: mort3924
4 Replies

2. Shell Programming and Scripting

Perl : code on ping showing difference result

Hi all, I am using the below code to ping a code and print whehter the connection is successful or not. use Net::Ping; $p = Net::Ping->new(); my $host = "x.x.x.x"; # print "$host is alive.\n" if $p->ping($host); if ($p->ping($host,3)) { print... (0 Replies)
Discussion started by: scriptscript
0 Replies

3. Shell Programming and Scripting

Perl : ping for multiple IPs not working

I have written perl ping program to ping list of IPs one by one and print the status.But each and every time it is showing the status as Pass for all IPs even though the IP is wrong. multipleip.pl use Net::Ping; $p = Net::Ping->new(); $ifile="inventory.txt"; ... (2 Replies)
Discussion started by: scriptscript
2 Replies

4. Shell Programming and Scripting

Animation Ping on Solaris Like Cisco Ping

Hi, I develop simple animation ping script on Solaris Platform. It is like Cisco ping. Examples and source code are below. bash-3.00$ gokcell 152.155.180.8 30 Sending 30 Ping Packets to 152.155.180.8 !!!!!!!!!!!!!.!!!!!!!!!!!!!!!. % 93.33 success... % 6.66 packet loss...... (1 Reply)
Discussion started by: gokcell
1 Replies

5. Shell Programming and Scripting

Ping and Perl

Hi There i have little situation that i could us some help with. We have a dhcp server, but the problem is if that a machine has been offline for a while it loose it's lease and so if you ping it you get unknown host if there a way using perl that it will continue to try and ping it, even tho... (1 Reply)
Discussion started by: ab52
1 Replies

6. Programming

Perl Ping Loop

Hi All i have an issue with ping, we are using dhcp and so if the machine has been offline and i ping it, i get " ping: unknown host <hostname> is there a way i can stick a loop somewhere so it would keep trying when it got the unknown host error and then when the machine came back online... (2 Replies)
Discussion started by: ab52
2 Replies

7. Shell Programming and Scripting

perl return ips after successful ping

Hi, I have this script in ksh, what it does is loop every ip in the nodes_nso and produced another variable up_nodes_nso of only ip's that are up. nodes_nso=$(cat /var/tmp/nodes.txt) echo "ICMP Tests:" up_nodes_nso="" for ip in ${nodes_nso} ; do ping ${ip} 3 > /dev/null if ; then ... (1 Reply)
Discussion started by: borderblaster
1 Replies

8. Shell Programming and Scripting

perl ping script

Dear All Any one able been writing any command ping in perl??basically i want to wring ping script to send 1000 packet ping then initiate "Ctrl C' terminal to ping example below:-] #!/usr/local/bin/perl $r=`/bin/ping 172.23.11.254`; Thank You ---------- Post updated at 10:27 PM ----------... (2 Replies)
Discussion started by: netxus
2 Replies

9. Shell Programming and Scripting

Perl telnet to cisco router and compare the ping ms

All Please help, i will telnet to router to obain the ping status and compare, if higher than normal latency, i will have further action.. if i do the telent and in perl script then .... e.g the result i obtain from the router will be =' Success rate is 100 percent (5/5), round-trip... (4 Replies)
Discussion started by: optimus
4 Replies

10. Shell Programming and Scripting

Perl Ping Determine Success or Fail

I know how to ping in Perl. That is easy. What I am wondering is if there is a way for Perl to determine whether the ping was successful or not. Or do I need to save the results out and parse the results seperately looking for the #of tries and successful revieves. Thanks. (1 Reply)
Discussion started by: gdboling
1 Replies
Login or Register to Ask a Question