Я не знаю, не по себе, но вы могли бы изучить источник.На моем Ubuntu route
предоставляется net-tools
:
~$ which route
/sbin/route
~$ dpkg -S /sbin/route
net-tools: /sbin/route
Чтобы вы могли создать каталог где-нибудь, запустите apt-get source net-tools
.Потом я заглянул в источник, и route.c
выглядело как хорошее место для начала.Если аргументы route
не передаются, он вызывает route_info()
для данного семейства адресов и параметров, поэтому grep
для этого:
~/z$ grep -r route_info *
lib/net-support.h:extern int route_info(const char *afname, int flags);
lib/getroute.c: *960221 {1.02} Bernd Eckenfels: renamed from route_info to getroute.c
lib/getroute.c:int route_info(const char *afname, int options)
netstat.c: *960204 {1.10} Bernd Eckenfels: aftrans, usage, new route_info,
netstat.c: i = route_info(afname, options);
route.c: * {1.79} Bernd Eckenfels: route_info
route.c: i = route_info(afname, options);
Отлично.lib/getroute.c
выглядит многообещающе.Похоже, он выбирает, какую функцию вызывать, основываясь на таблице указателей функций, отсортированной по семейству адресов.Давайте найдем IPv4:
inet_aftype.rprint = INET_rprint;
Итак, нам нужно найти определение INET_rprint
.grep
доставляет: это в lib/inet_gr.c
.Самая интересная вещь здесь - это fopen(_PATH_PROCNET_ROUTE, "r")
, который определяется в lib/pathnames.h
как /proc/net/route
.proc_gen_fmt
, определенное в lib/proc.c
, используется для облегчения синтаксического анализа вывода.
Итак, ваш ответ, по крайней мере на моем компьютере с GNU / Linux, должен выглядеть так: /proc/net/route
.