分页: 1 / 1

802.11和以太网封装问题

发表于 : 2013-09-28 1:28
hongrun007
写了一个小模块,重要信息如下:

代码: 全选

        struct sk_buff *sk = skb;
        struct iphdr *iphead = (struct iphdr *)sk->network_header;
        struct ethhdr *eth = (struct ethhdr *)sk->mac_header;

        printk(KERN_ALERT "Receive packet from: %x.%x.%x.%x.%x.%x\n",eth->h_source[0],eth->h_source[1],
                        eth->h_source[2],eth->h_source[3],
                        eth->h_source[4],eth->h_source[5]);
        return NF_ACCEPT;
得到的MAC是正确的,一开始没注意,后来想想不对啊,我源主机和目的主机都是连的无线网,封装不应该是以太网,怎么会得到的正确的结果的,然后用wireshark抓包看了下,网卡好像拿到的是以太网封装,请教怎么回事,是不是无线网卡驱动自动更换封装了?如果是,如果想要看到802.11的封装形式,难道不应该用的sk_buff吗?

Re: 802.11和以太网封装问题

发表于 : 2013-09-28 15:45
lilydjwg
物理层不都是网卡管的吗?

Re: 802.11和以太网封装问题

发表于 : 2013-09-28 21:34
hongrun007
lilydjwg 写了:物理层不都是网卡管的吗?
是网卡管的,netfilter是内核级别的,应该能看到原始数据吧?

Re: 802.11和以太网封装问题

发表于 : 2014-02-16 18:16
ssjmhyvi
80211工作在L2,netfilter拿到的包实际上是无线网卡驱动提交给L2以太网的包,这个包已经经过了转换,比如去掉80211帧头,修改以太网帧头等。所以你的wireshark拿到的也只是以太网帧而已。实际上L2里面还细分两层,LLC层与MAC层了MAC层就已经提供了无线帧与以太网帖的转换,LLC层屏蔽下层差异,使上层统一以以太网帧格式处理。所以你要捉取无线帧的话,得在无线驱动里面添加源码(类似于ieee80211_input.c/ieee80211_output.c里面)。

Re: 802.11和以太网封装问题

发表于 : 2014-02-18 0:11
lilydjwg
哦哦~