總綱:
- 路由套接字
AF_ROUTE - 機(jī)制
進(jìn)程到內(nèi)核
內(nèi)核到進(jìn)程
sysctl 機(jī)制 - 路由套接字?jǐn)?shù)據(jù)結(jié)構(gòu)
- sysctl 機(jī)制-SNMP-MIB
細(xì)節(jié)
- 數(shù)據(jù)鏈路套接字地址結(jié)構(gòu)
struct sockaddr_dl
從內(nèi)核返回到應(yīng)用層的漏隐,關(guān)于接口的鏈路層信息
MAC地址策彤,接口名稱岖食,接口索引等信息
- 讀寫路由套接字
原理:建立一個(gè) AF_ROUTE 的原始(SOCK_RAW)套接字冀惭,向該套接字寫入對(duì)應(yīng)的數(shù)據(jù)結(jié)構(gòu)犬第,數(shù)據(jù)結(jié)構(gòu)里攜帶參數(shù);寫完后梗脾,從該套接字讀取數(shù)據(jù)即為根據(jù)參數(shù)獲取到的來自內(nèi)核的信息持钉,信息仍然以數(shù)據(jù)結(jié)構(gòu)的方式存儲(chǔ)。
添加第练、變更阔馋、刪除路由,獲取娇掏、鎖定路徑信息垦缅,其他從內(nèi)核獲取的信息。
攜帶參數(shù)是驹碍,數(shù)據(jù)結(jié)構(gòu)指定將要攜帶哪些數(shù)據(jù)壁涎,攜帶的地址信息放在數(shù)據(jù)結(jié)構(gòu)尾部凡恍,同數(shù)據(jù)結(jié)構(gòu)一同寫入套接字。
返回的數(shù)據(jù)怔球,數(shù)據(jù)結(jié)構(gòu)覺得攜帶了哪些信息嚼酝,攜帶的地址信息內(nèi)容在隨后的數(shù)據(jù)字段里。
- sysctl 機(jī)制
原理:使用 sysctl 系統(tǒng)調(diào)用竟坛,可以獲取或設(shè)置內(nèi)核參數(shù)闽巩。內(nèi)核參數(shù)以樹狀結(jié)構(gòu)組織的節(jié)點(diǎn),SNMP-MIB的機(jī)制担汤。對(duì)于路由涎跨,使用:CTL_NET -> AF_ROUTE 節(jié)點(diǎn)下的信息。mib 是以數(shù)組的方式傳遞崭歧。
sysctl 系統(tǒng)調(diào)用隅很,傳遞 MIB 信息,并傳入用于存放設(shè)置或獲取的信息地址率碾。
返回的信息是以 “數(shù)據(jù)結(jié)構(gòu) + 地址信息” 的方式存儲(chǔ)叔营。
net_rt_iflist 使用 CTL_NET -> AF_ROUTE -> 0 -> <family> -> NET_RT_IFLIST -> <flags> 的方式獲取接口列表。
詳細(xì)內(nèi)容參加:UNIX網(wǎng)絡(luò)編程