我不知道離手,但你可以研究源。在我的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
。 lib/proc.c
中定義的proc_gen_fmt
用於更容易地解析輸出。
所以,你的答案,至少在我的GNU/Linux上,應該是/proc/net/route
。
不錯。更多人需要對這種直接的「直接來源」技術感到滿意。這就是開放源代碼和非元系統語言的價值所在。 – 2010-10-08 13:59:07