Don't MiTM me please
A few words about assumptions:


You're assuming that arp is installed. This is definitely not true for my system. arp as well as other "core network tools" like ifconfig have been superseded by ip. The more modern equivalents are ip neigh show and ip addr. The obsolescense is explicitly mentioned on the manpage
IIUC (because traceroute isn't available on my arch) similar considerations apply for traceroute. Also do note that you should be able to use the same idea as for the arp-check in the creation of private_route:

route = $(tracepath -n 8.8.8.8 | awk '{print $2}')
private_route = # consider ipcalc or use $route as a smaller input to python



Final considerations:

You're inconsistent in the indentation of block scopes. In arp_checker the then and else block are indented, in route_checker they are, but the for loop body is not.
I strongly recommend indenting every block to increase readability.

Aside from that: Good job of not falling into common traps like:


not double-quoting variables
not using subshells
using unsafe condition checks
missing a shebang


From what I can see, this is a well-crafted script :)