对基于NETLINK的应用来说, 我们需要一种方式能够用来查看应用与内核之间通信的命令和事件
目前内核已经实现了netlink监控的内核模块,基于此内核模块,我们可以使用传统的网络协议抓包方式来获取NETLINK相关的命令和事件
1)打开内核NETLINK监控模块功能
CONFIG_NLMON=m //以模块的方式打开
2)使用ip 命令创建nlmon网口
#ip link add nlmon0 type nlmon
#ip link set nlmon0 up
3)使用tcpdump来开始抓获应用交互场景间发生的基于NETLINK的消息
tcpdump -i nlmon0 -w /path/to/writable/folder/netlinkMsg.pcap
4)测试完成, 使用wireshark工具打开pcap包,即可查看
5)当前问题,
a)内核默认模块限制了netlink消息类别, 目前如下, 可以简单修改这个函数,使得
tcpdump可以抓取所有netlink类型的消息
static bool netlink_filter_tap(const struct sk_buff *skb)
{
struct sock *sk = skb->sk;
/* We take the more conservative approach and
* whitelist socket protocols that may pass.
*/
switch (sk->sk_protocol) {
case NETLINK_ROUTE:
case NETLINK_USERSOCK:
case NETLINK_SOCK_DIAG