总纲:
- 路由套接字
AF_ROUTE - 机制
进程到内核
内核到进程
sysctl 机制 - 路由套接字数据结构
- sysctl 机制-SNMP-MIB
细节
- 数据链路套接字地址结构
struct sockaddr_dl
从内核返回到应用层的,关于接口的链路层信息
MAC地址,接口名称,接口索引等信息
- 读写路由套接字
原理:建立一个 AF_ROUTE 的原始(SOCK_RAW)套接字,向该套接字写入对应的数据结构,数据结构里携带参数;写完后,从该套接字读取数据即为根据参数获取到的来自内核的信息,信息仍然以数据结构的方式存储。
添加、变更、删除路由,获取、锁定路径信息,其他从内核获取的信息。
携带参数是,数据结构指定将要携带哪些数据,携带的地址信息放在数据结构尾部,同数据结构一同写入套接字。
返回的数据,数据结构觉得携带了哪些信息,携带的地址信息内容在随后的数据字段里。
- sysctl 机制
原理:使用 sysctl 系统调用,可以获取或设置内核参数。内核参数以树状结构组织的节点,SNMP-MIB的机制。对于路由,使用:CTL_NET -> AF_ROUTE 节点下的信息。mib 是以数组的方式传递。
sysctl 系统调用,传递 MIB 信息,并传入用于存放设置或获取的信息地址。
返回的信息是以 “数据结构 + 地址信息” 的方式存储。
net_rt_iflist 使用 CTL_NET -> AF_ROUTE -> 0 -> <family> -> NET_RT_IFLIST -> <flags> 的方式获取接口列表。
详细内容参加:UNIX网络编程
网友评论