API 在不管理控制字段的情况下在 C 中构造 802.11 帧
API to construct 802.11 frames in C without managing control fields
我正在尝试在 C 中构建和发送 802.11 帧。例如,我看到可以使用 pcap 来完成。但是,在我看到的所有示例中,我必须自己设置序列号和其他控制字段。所以我想知道是否有一个 API 允许管理所有这些控制部分以及我只需要指定地址的地方?
提前谢谢你,
首先,您要制作什么类型的数据包?数据帧或信标帧.....
如果您是从头开始创建您需要自己设置所有参数,我正在使用这个 header 文件
[ieee80211]http://lxr.free-electrons.com/source/include/linux/ieee80211.h
对于 802.11 配置参数和 radiotap headers ,您可以使用
[无线电]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(frame control),它定义在header.
我的建议是创建您自己的 header 文件或根据您的需要进行修改..
希望这对您有所帮助 ??
我正在尝试在 C 中构建和发送 802.11 帧。例如,我看到可以使用 pcap 来完成。但是,在我看到的所有示例中,我必须自己设置序列号和其他控制字段。所以我想知道是否有一个 API 允许管理所有这些控制部分以及我只需要指定地址的地方?
提前谢谢你,
首先,您要制作什么类型的数据包?数据帧或信标帧.....
如果您是从头开始创建您需要自己设置所有参数,我正在使用这个 header 文件 [ieee80211]http://lxr.free-electrons.com/source/include/linux/ieee80211.h 对于 802.11 配置参数和 radiotap headers ,您可以使用 [无线电]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(frame control),它定义在header.
我的建议是创建您自己的 header 文件或根据您的需要进行修改..
希望这对您有所帮助 ??