Что делают маршруты «поймать все»? Если это просто маршруты шлюзов, поиск маршрута все равно будет работать. Вы можете сделать что-то вроде:
$ ip route get <ip> | head -1 | awk '{ print $3 }'
Это напечатало бы адрес шлюза для маршрута без связи:
$ ip route get 8.8.8.8 | head -1 | awk '{ print $3 }'
192.168.0.1
... или имя интерфейса для связанного маршрута:
$ ip route get 192.168.0.2 | head -1 | awk '{ print $3 }'
eth0
И, кстати (как и следует из моего ответа), я согласен с комментарием о том, что принцип , а не , опирающийся на внешнюю программу, в этом случае слишком осторожен. =) Сомневаюсь, что вывод ip
изменится.
Лично я бы использовал поиск маршрута, поскольку tracepath
или traceroute
полагался бы на хост 1-го перехода, который фактически отправлял бы вам сообщение TTL expired
ICMP (оно могло бы его отбросить). Я не знаю, какой у вас вариант использования.
Если вам нужна библиотека python для этого, я бы посмотрел на libdnet .