#!/usr/bin/env perl use strict; use warnings; use 5.010; use IO::Handle; use IPC::Run qw(harness); use Time::HiRes qw(usleep); our $VERSION = '0.1'; my $host = shift; my $id = 0; my $last_id = 0; my $is_beep = 1; my $was_beep = 1; my $no_reply = 0; my $ping = harness(['ping', '-n', $host], '<' => \undef, '>&' => \&parse_ping_output, ); sub parse_ping_output { my ($line) = @_; chomp($line); if ($line =~ m{ ^ \d+ \s bytes \s from \s \S+ \s icmp_req = (? \d+ ) }x) { $id = $+{id}; } } $ping->start(); sleep(2); # Ignore first line $ping->pump(); while(usleep(100_000)) { $ping->pump_nb(); if ($id != $last_id) { $is_beep = 1; print '^'; $last_id = $id; $no_reply = 0; } else { $is_beep = 0; $no_reply++; if ($no_reply > 15) { $is_beep = 1; } print '_'; } if ($is_beep) { print 'O'; } STDOUT->flush(); } $ping->kill_kill( grace => 1 ); __END__ =head1 NAME =head1 SYNOPSIS =head1 VERSION =head1 DESCRIPTION =head1 OPTIONS =over =back =head1 EXIT STATUS =head1 CONFIGURATION None. =head1 DEPENDENCIES =over =back =head1 BUGS AND LIMITATIONS =head1 AUTHOR Copyright (C) 2011 by Daniel Friesel Ederf@finalrewind.orgE =head1 LICENSE 0. You just DO WHAT THE FUCK YOU WANT TO.