diff options
author | Guillaume Mazoyer <respawneral@gmail.com> | 2014-12-13 00:26:52 +0100 |
---|---|---|
committer | Guillaume Mazoyer <respawneral@gmail.com> | 2014-12-13 00:26:52 +0100 |
commit | 21cb7dd8a0fa4a87481506f08732865f763b94d4 (patch) | |
tree | 3912a4dd7ecd17b367a4cf2ff6a27320b232dadb | |
parent | 464ae23f92b5056cc1dc1bf7bf701a58187447c3 (diff) |
Fix traceroute for Cisco when using 'source'.
On Cisco, when using traceroute 'source' option with a FQDN, you
need to explicitly specify if you want an IPv4 or an IPv6
traceroute. To fix this we try to resolve the given FQDN and then
pass the IPv4 or IPv6 address instead of the FQDN
Also make sure that the FQDN is used in the issued command. Do not
use the resolved IP anymore.
-rw-r--r-- | routers/bird.php | 12 | ||||
-rw-r--r-- | routers/cisco.php | 17 | ||||
-rw-r--r-- | routers/quagga.php | 8 |
3 files changed, 26 insertions, 11 deletions
diff --git a/routers/bird.php b/routers/bird.php index 9ee2e7f..06aea32 100644 --- a/routers/bird.php +++ b/routers/bird.php @@ -36,11 +36,11 @@ final class Bird extends Router { } if (match_ipv4($destination)) { - $ping = 'ping -A -c 10 '.$destination; + $ping = 'ping -A -c 10 '.$fqdn; } else if (match_ipv6($destination)) { - $ping = 'ping6 -A -c 10 '.$destination; + $ping = 'ping6 -A -c 10 '.$fqdn; } else { - throw new Exception('The parameter is not an IPv4/IPv6 address or a FQDN.'); + throw new Exception('The parameter does not resolve to an IPv4/IPv6 address.'); } if (($ping != null) && $this->has_source_interface_id()) { @@ -69,11 +69,11 @@ final class Bird extends Router { } if (match_ipv4($destination)) { - $traceroute = 'traceroute -4 -A -q1 -N32 -w1 -m15 '.$destination; + $traceroute = 'traceroute -4 -A -q1 -N32 -w1 -m15 '.$fqdn; } else if (match_ipv6($destination)) { - $traceroute = 'traceroute -6 -A -q1 -N32 -w1 -m15 '.$destination; + $traceroute = 'traceroute -6 -A -q1 -N32 -w1 -m15 '.$fqdn; } else { - throw new Exception('The parameter is not an IPv4/IPv6 address or a FQDN.'); + throw new Exception('The parameter does not resolve to an IPv4/IPv6 address.'); } if (($traceroute != null) && $this->has_source_interface_id()) { diff --git a/routers/cisco.php b/routers/cisco.php index 5a135c0..20592b6 100644 --- a/routers/cisco.php +++ b/routers/cisco.php @@ -44,8 +44,23 @@ final class Cisco extends Router { $traceroute = null; if (match_ipv4($destination) || match_ipv6($destination) || - match_fqdn($destination)) { + (match_fqdn($destination) && !$this->has_source_interface_id())) { $traceroute = 'traceroute '.$destination; + } else if (match_fqdn($destination)) { + $fqdn = $destination; + $destination = fqdn_to_ip_address($fqdn); + + if (!$destination) { + throw new Exception('No A or AAAA record found for '.$fqdn); + } + + if (match_ipv4($destination)) { + $traceroute = 'traceroute ip '.$fqdn; + } else if (match_ipv6($destination)) { + $traceroute = 'traceroute ip6 '.$fqdn; + } else { + throw new Exception('The parameter does not resolve to an IPv4/IPv6 address.'); + } } else { throw new Exception('The parameter is not an IPv4/IPv6 address or a FQDN.'); } diff --git a/routers/quagga.php b/routers/quagga.php index 3dea33b..f78bdec 100644 --- a/routers/quagga.php +++ b/routers/quagga.php @@ -40,7 +40,7 @@ final class Quagga extends Router { } else if (match_ipv6($destination)) { $ping = 'ping6 -A -c 10 '.$destination; } else { - throw new Exception('The parameter is not an IPv4/IPv6 address or a FQDN.'); + throw new Exception('The parameter does not resolve to an IPv4/IPv6 address.'); } if (($ping != null) && $this->has_source_interface_id()) { @@ -69,11 +69,11 @@ final class Quagga extends Router { } if (match_ipv4($destination)) { - $traceroute = 'traceroute -4 -A -q1 -N32 -w1 -m15 '.$destination; + $traceroute = 'traceroute -4 -A -q1 -N32 -w1 -m15 '.$fqdn; } else if (match_ipv6($destination)) { - $traceroute = 'traceroute -6 -A -q1 -N32 -w1 -m15 '.$destination; + $traceroute = 'traceroute -6 -A -q1 -N32 -w1 -m15 '.$fqdn; } else { - throw new Exception('The parameter is not an IPv4/IPv6 address or a FQDN.'); + throw new Exception('The parameter does not resolve to an IPv4/IPv6 address.'); } if (($traceroute != null) && $this->has_source_interface_id()) { |