1.macOS通过NKE(network kernel extension)机制在多个层对网络栈进行扩展。NKE其实就是一种KEXT。
NKE并不是I/O kit的一部分,但是它位于BSD层,NKE是macOS特有的,在BSD UNIX中并不存在。
2.NKE的用途。
- 1.自定义防火墙和安全机制,比如加密。
- 2.添加新的协议支持。
- 3.添加新的网络接口支持。
- 4.创建虚拟网络接口。
- 5.创建自定义路由模式。
- 6.延迟、修改、查看或阻塞网络分组。
- 7.调试网络栈和驱动程序。
NKE通常使用以下KPI/过滤机制中的一种。 - 1.套接字过滤器:在套接字层的各处插入过滤器,能够过滤传入和传出的传输以及带外通信。支持过滤套接字API的大多数协议,还可以修改、延迟、或者拒绝传输。
- 2.IP过滤器:可以过滤ipv4以及ipv6传输。
- 3.接口过滤器:可以在特定网络接口上监控以及修改传输。发生在栈的结尾,所以传向该接口的所以协议和传输均为可见。
- 4.接口KPI:创建新网络接口的编程接口。
- 5.协议通道:用于将网络协议连接到网络接口。
3.套接字过滤器
套接字层位于用户空间和内核网络协议栈之间。因此,套接字过滤器无法窥视传出的网络分组的IP或TCP头,但是依然可以使用套接字过滤器过滤基于IP的传输,因为ip地址,协议族等。
另外要注意,套接字过滤器无法从那些不通过套接字API启动的协议中过滤传输,因为一些辅助协议是直接在协议栈中处理的,例如ARP协议。