有没有办法通过查看数据包本身(标头)或使用系统中的某个接口来检查数据包在内核中的MAC头(即802.11或802.2)是什么类型的?
答案 0 :(得分:1)
内核收到MAC头,所以在内核中,是的,有一种方法可以查看MAC头。
在用户空间中,它更复杂。您不会将IP数据包的MAC头传递给普通的TCP连接套接字(例如)。但是,您可以使用(例如)ebtables
和iptables
来处理连接。从那里你可以标记连接(使用--connmark
),你可以找到与libconntrack
或类似的适当连接,并读取标记。您可以使用此技术来区分两类mac标头。
所以如何实现这一点取决于你想做什么。
答案 1 :(得分:0)
在Linux内核v3.6.1中,include/linux/ieee80211.h
似乎有一个函数可以检测以太网帧是否为IEEE802.11类型。
你去了:
/**
* ieee80211_is_data_present - check if type is IEEE80211_FTYPE_DATA and has data
* @fc: frame control bytes in little-endian byteorder
*/
static inline int ieee80211_is_data_present(__le16 fc)
{
/*
* mask with 0x40 and test that that bit is clear to only return true
* for the data-containing substypes.
*/
return (fc & cpu_to_le16(IEEE80211_FCTL_FTYPE | 0x40)) ==
cpu_to_le16(IEEE80211_FTYPE_DATA);
}