用于在C中构建802.11帧而无需管理控制字段的API

时间:2015-04-08 15:19:39

标签: c 802.11

我正在尝试在C中构建和发送802.11帧。我看到可以用pcap来实现它。但是,在我看到的所有例子中,我必须设置自己的序列号和其他控制字段。所以我想知道是否有一个API允许管理所有这个控制部分,我只需要指定地址?

提前谢谢你,

1 个答案:

答案 0 :(得分:0)

首先,您要尝试制作什么类型的数据包?数据帧或信标帧.....

如果您是从头开始创建,则需要自己设置所有参数,我正在使用此头文件 [ieee80211] http://lxr.free-electrons.com/source/include/linux/ieee80211.h 对于802.11配置参数和radiotap标头,您可以使用 [radiotap] http://lxr.free-electrons.com/source/include/net/ieee80211_radiotap.h

我可以给你一个创建信标帧的示例代码(部分)

// Add the radiotap header
radiotap->it_version = 0;
radiotap->it_len = sizeof(*radiotap) + sizeof(dataRate);
radiotap->it_present = (1 << IEEE80211_RADIOTAP_RATE);


// Beacon packet flags
dot80211->i_fc[0] = IEEE80211_FC0_VERSION_0 | IEEE80211_FC0_TYPE_MGT | IEEE80211_FC0_SUBTYPE_BEACON;
dot80211->i_fc[1] = IEEE80211_FC1_DIR_NODS;
dot80211->i_dur[0] = 0x0;
dot80211->i_dur[1] = 0x0;
// Destination = broadcast (no retries)
memcpy( dot80211->i_addr1, mac_Destination, IEEE80211_ADDR_LEN );
// Source = our own mac address
memcpy( dot80211->i_addr2, mac_source, IEEE80211_ADDR_LEN );
// BSS = our mac address
memcpy( dot80211->i_addr3, mac_BSSID, IEEE80211_ADDR_LEN );
// Sequence control: Automatically set by the driver

beacon -> beacon_timestamp = TimeStamp;
printf("%"PRIu64,beacon -> beacon_timestamp);
// interval = 100 "time units" = 102.4 ms
// Each time unit is equal to 1024 us
beacon->beacon_interval =  BEACON_INTERVAL;
// capabilities = sent by ESS
//beacon->beacon_capabilities = x0003;

例如:

dot80211->i_fc[0] = IEEE80211_FC0_VERSION_0 | IEEE80211_FC0_TYPE_MGT | IEEE80211_FC0_SUBTYPE_BEACON;

您可以像这样设置FCS(帧控制),它在标题中定义。

我的建议是创建自己的头文件或根据需要进行修改..

希望这有帮助??