網上的抓包方法如下:
modprobe nlmon
ip link add nlmon0 type nlmon
ip link set dev nlmon0 up
# 必須使用-w保存到文件
tcpdump -i nlmon0 -w netlinik.pcap
注意:tcpdump時必須使用-w保存到文件,然后通過wireshark分析。不支持tcpdump內直接分析。
將抓到的報文用wireshark打開,看到確實可以解析,一陣竊喜
但找了一番,并未找到自己想要的包。
并且可以篤定沒抓到自己發送的netlink消息。
結合網上的分析,以及看代碼,可以得出結論,并不是所有NETLINK包都能抓到,僅支持如下協議的netlink包:
wireshark抓不到包?而我想要抓的netlink協議號是自定義的。所以抓不到。
af_netlink.c中
__netlink_sendskb
-> netlink_deliver_tap
-> __netlink_deliver_tap
在__netlink_deliver_tap
時調用過濾器函數,不支持的協議會進行過濾
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:case NETLINK_NFLOG:case NETLINK_XFRM:case NETLINK_FIB_LOOKUP:case NETLINK_NETFILTER:case NETLINK_GENERIC:return true;}return false;
}
使用NETLINK_GENERIC來進行通信。
NETLINK的協議號本就只支持32個,已經使用了20來個了,也經不起我們一個進程跟內核通信就造一個協議號。因此可以使用NETLINK_GENERIC,也可滿足需求。
這樣還能抓包多好。
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态