C 如何使用带有netlink套接字的libnl将设备连接到带有WPA2的AP?
我用C语言开发了一些用于在嵌入式设备上以编程方式管理wifi的功能。下面的代码显示了我用来将我的设备关联并连接到打开的AP(无身份验证加密)的函数C 如何使用带有netlink套接字的libnl将设备连接到带有WPA2的AP?,c,wifi,linux-device-driver,netlink,wpa,C,Wifi,Linux Device Driver,Netlink,Wpa,我用C语言开发了一些用于在嵌入式设备上以编程方式管理wifi的功能。下面的代码显示了我用来将我的设备关联并连接到打开的AP(无身份验证加密)的函数 但它不起作用!连接管理器“iw”的工作方式与此类似,但其功能并不容易理解。你们中的一些人能帮我开发这个吗?谢谢大家 我目前正在从事类似的工作。首先-不要忘记WPA2密码不能少于8个符号!但这无助于连接。我想这里我们应该使用NL80211功能实现WPA2 4路握手。我正在深入研究,我目前也在做类似的工作。首先-不要忘记WPA2密码不能少于8个符号!但这
但它不起作用!连接管理器“iw”的工作方式与此类似,但其功能并不容易理解。你们中的一些人能帮我开发这个吗?谢谢大家 我目前正在从事类似的工作。首先-不要忘记WPA2密码不能少于8个符号!但这无助于连接。我想这里我们应该使用NL80211功能实现WPA2 4路握手。我正在深入研究,我目前也在做类似的工作。首先-不要忘记WPA2密码不能少于8个符号!但这无助于连接。我想这里我们应该使用NL80211功能实现WPA2 4路握手。我正在深入研究
static int ap_conn() {
struct nl_msg *msg = nlmsg_alloc();
int if_index = if_nametoindex("wlan0"); // Use this wireless interface for scanning.
// Open socket to kernel.
struct nl_sock *socket = nl_socket_alloc(); // Allocate new netlink socket in memory.
genl_connect(socket); // Create file descriptor and bind socket.
int driver_id = genl_ctrl_resolve(socket, "nl80211"); // Find the
nl80211 driver ID.
genlmsg_put(msg, 0, 0, driver_id, 0, (NLM_F_REQUEST | NLM_F_ACK), NL80211_CMD_CONNECT, 0);
nla_put_u32(msg, NL80211_ATTR_IFINDEX, if_index); // Add message attribute, which interface to use.
nla_put(msg, NL80211_ATTR_SSID, strlen("Validator_Test"), "Validator_Test");
int ret = nl_send_auto_complete(socket, msg); // Send the message.
printf("NL80211_CMD_CONNECT sent %d bytes to the kernel.\n", ret);
ret = nl_recvmsgs_default(socket); // Retrieve the kernel's answer. callback_dump() prints SSIDs to stdout.
nlmsg_free(msg);
if (ret < 0) {
printf("ERROR: nl_recvmsgs_default() returned %d (%s).\n", ret, nl_geterror(-ret));
return ret;
}
nla_put_failure:
return -ENOSPC;
nla_put_32(msg, NL80211_ATTR_WPA_VERSIONS, NL80211_WPA_VERSION_2);
nla_put(msg, NL80211_ATTR_PMK, strlen("pass"), "pass");