Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何使用带有netlink套接字的libnl将设备连接到带有WPA2的AP?_C_Wifi_Linux Device Driver_Netlink_Wpa - Fatal编程技术网

C 如何使用带有netlink套接字的libnl将设备连接到带有WPA2的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个符号!但这

我用C语言开发了一些用于在嵌入式设备上以编程方式管理wifi的功能。下面的代码显示了我用来将我的设备关联并连接到打开的AP(无身份验证加密)的函数


但它不起作用!连接管理器“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");