From 8dc54b79e3125c1e59e9066afdcf0da8dcf5db8f Mon Sep 17 00:00:00 2001 From: Guillaume Mazoyer Date: Wed, 6 Aug 2014 01:14:32 +0200 Subject: Add ping/traceroute for FQDN on BIRD and Quagga. Basically this can work with all Linux boxes. It gets A and AAAA records from DNS and decide if it can uses IPv6 or IPv4 to ping or to traceroute. IPv6 is always preferred of course. --- routers/bird.php | 24 ++++++++++++++++++++++++ routers/quagga.php | 24 ++++++++++++++++++++++++ 2 files changed, 48 insertions(+) (limited to 'routers') diff --git a/routers/bird.php b/routers/bird.php index 420cd42..a9fec59 100644 --- a/routers/bird.php +++ b/routers/bird.php @@ -67,6 +67,18 @@ final class Bird extends Router { $commands[] = 'ping -A -c 10 '.$parameters; } else if (match_ipv6($parameters)) { $commands[] = 'ping6 -A -c 10 '.$parameters; + } else if (match_fqdn($parameters)) { + $ip_address = fqdn_to_ip_address($parameters); + + if (!$ip_address) { + throw new Exception('No A or AAAA record found for '.$parameters); + } + + if (match_ipv4($ip_address)) { + $commands[] = 'ping -A -c 10 '.$parameters; + } else if (match_ipv6($ip_address)) { + $commands[] = 'ping6 -A -c 10 '.$parameters; + } } else { throw new Exception('The parameter is not an IPv4/IPv6 address.'); } @@ -77,6 +89,18 @@ final class Bird extends Router { $commands[] = 'traceroute -4 -A -q1 -N32 -w1 -m15 '.$parameters; } else if (match_ipv6($parameters)) { $commands[] = 'traceroute -6 -A -q1 -N32 -w1 -m15 '.$parameters; + } else if (match_fqdn($parameters)) { + $ip_address = fqdn_to_ip_address($parameters); + + if (!$ip_address) { + throw new Exception('No A or AAAA record found for '.$parameters); + } + + if (match_ipv4($ip_address)) { + $commands[] = 'traceroute -4 -A -q1 -N32 -w1 -m15 '.$parameters; + } else if (match_ipv6($ip_address)) { + $commands[] = 'traceroute -6 -A -q1 -N32 -w1 -m15 '.$parameters; + } } else { throw new Exception('The parameter is not an IPv4/IPv6 address.'); } diff --git a/routers/quagga.php b/routers/quagga.php index 9f6426d..642ff4e 100644 --- a/routers/quagga.php +++ b/routers/quagga.php @@ -62,6 +62,18 @@ final class Quagga extends Router { $commands[] = 'ping -A -c 10 '.$parameters; } else if (match_ipv6($parameters)) { $commands[] = 'ping6 -A -c 10 '.$parameters; + } else if (match_fqdn($parameters)) { + $ip_address = fqdn_to_ip_address($parameters); + + if (!$ip_address) { + throw new Exception('No A or AAAA record found for '.$parameters); + } + + if (match_ipv4($ip_address)) { + $commands[] = 'ping -A -c 10 '.$parameters; + } else if (match_ipv6($ip_address)) { + $commands[] = 'ping6 -A -c 10 '.$parameters; + } } else { throw new Exception('The parameter is not an IPv4/IPv6 address.'); } @@ -72,6 +84,18 @@ final class Quagga extends Router { $commands[] = 'traceroute -4 -A -q1 -N32 -w1 -m15 '.$parameters; } else if (match_ipv6($parameters)) { $commands[] = 'traceroute -6 -A -q1 -N32 -w1 -m15 '.$parameters; + } else if (match_fqdn($parameters)) { + $ip_address = fqdn_to_ip_address($parameters); + + if (!$ip_address) { + throw new Exception('No A or AAAA record found for '.$parameters); + } + + if (match_ipv4($ip_address)) { + $commands[] = 'traceroute -4 -A -q1 -N32 -w1 -m15 '.$parameters; + } else if (match_ipv6($ip_address)) { + $commands[] = 'traceroute -6 -A -q1 -N32 -w1 -m15 '.$parameters; + } } else { throw new Exception('The parameter is not an IPv4/IPv6 address.'); } -- cgit v1.2.3