我想使用Wifi-Direct连接两台设备.一个是带Linux的电脑(在我的测试中我使用的是Linux Mint 17.2),另一个是Android智能手机(带有Android 4.3的三星Galaxy S3.没有root,也不想root).
在互联网上阅读了许多指南,我决定在Linux中使用wpa_supplicant并为Android创建一个应用程序.这是我为wpa_supplicant找到的最佳指南之一:http: //processors.wiki.ti.com/index.php/OMAP_Wireless_Connectivity_NLCP_WiFi_Direct_Configuration_Scripts#p2p_group_add
当我运行iw list时,我看到"支持的接口模式:"允许P2P_client和P2P_GO.我的wpa_supplicant.conf包含:
ctrl_interface=/var/run/wpa_supplicant
update_config=1
ap_scan=1
device_name=My-pc
device_type=1-0050F204-1
driver_param=use_p2p_group_interface=1
p2p_go_intent=15
p2p_go_ht40=1
Run Code Online (Sandbox Code Playgroud)
该应用程序非常类似于此示例(它来自一本书)http://kurser.iha.dk/eit/itsmap/basic/MEIER/Professional%20Android%204%20All%20downloads/9781118102275%20PA4AD/Code%20Snippets/章%2016/PA4AD_Ch16_WiFiDirect/src/com/paad/wifidirect/WiFiDirectActivity.java (我删除了整个"套接字部分").
它按预期工作.当我尝试使用两个Android设备时,他们可以看到对方并连接(它显示为Wifi-Direct图标).
现在我正在尝试连接Android和Linux,但我想我真的不明白wpa_supplicant是如何工作的.我也看到了这个与我问的问题非常相似的问题,但它并没有真正回答我的怀疑... Android智能手机和其他设备之间的直接Wifi通信
我的问题是我无法理解如何在两个设备之间进行握手以及如何设置网络.
Wpa_supplicant是我的问题.我跑:
sudo wpa_supplicant -wlan0 -Dnl80211 -c/etc/wpa_supplicant.conf
sudo wpa_cli
Run Code Online (Sandbox Code Playgroud)
但是我遇到了很多问题: - 设备名称(和其他参数)没有像我在.conf文件中指定的那样设置 - wpa_supplicant继续尝试连接到所有网络 - p2p_find真的很慢......
所以我进入/ usr/share/dbus-1/system-services并移走了两个文件
fi.epitest.hostap.WPASupplicant.service
fi.w1.wpa_supplicant1.service
Run Code Online (Sandbox Code Playgroud)
现在我能
sudo killall wpa_supplicant
Run Code Online (Sandbox Code Playgroud)
它真的死了,在没有重新连接下面的第二个的情况下将我与Wifi断开连接.现在我可以启动wpa_supplicant并解决了三个问题.
我进入wpa_cli,启动"p2p_find",同时,我在应用程序中启用搜索.
Android和Linux现在可以看到对方了.
P2P-DEVICE-FOUND 00:11:22:44:88:ff p2p_dev_addr=00:11:22:44:88:ff
pri_dev_type=10-0050F204-5 name='GT-I9300' config_methods=0x188
dev_capab=0x24 group_capab=0x0 vendor_elems=1 new=0
Run Code Online (Sandbox Code Playgroud)
使用"p2p_peers",我可以看到手机MAC.
> aa:bb:cc:dd:ee:ff
Run Code Online (Sandbox Code Playgroud)
在这里,我不能继续.我尝试了各种各样的可能性,但没有一种可行.我的目标是让Linux成为集团所有者.
看到我无法连接Android/Linux,我尝试使用Linux/Linux(Linux Mint作为GO,Ubuntu作为客户端)进行一些练习,遵循来自互联网的示例,如第一个链接中的示例.我甚至在这里遇到了很多问题.
在Mint我尝试
p2p_connect MAC_UBUNTU pin auth
Run Code Online (Sandbox Code Playgroud)
在Ubuntu我试试 …
我在使用 raspberry pi 成像器时遇到了问题,所以只是从他们的网站下载了最新的 64 位操作系统。然后使用 Belena Etcher 蚀刻图像。制作了 ssh 文件和 wpa_supplicant 文件。
它显示在网络上,但由于某种原因,我无法通过终端使用 ssh pi@ip.address 通过 ssh 连接,它要求输入密码,但当我输入“raspberry”时,它不起作用。有什么改变吗?
在人们得出结论说这是重复的帖子之前,我想指出的是,我已经浏览了有关该主题的其他帖子,但实际上还没有找到解决方案。
我的目标是从 C 程序访问 wpa_supplicant 来执行以下操作:
wpa_ctrl.h我只需将这些文件包含在我的项目目录中即可使用其中的功能wpa_ctrl.c 从这个链接,我复制 wpa_supplicant-2.5/src/common/wpa_ctrl.h 到 wpa_supplicant-2.5/src/utils目录中(因为common.h有很多依赖项)。然后我在同一目录中编写了一个简单的 C 程序hostapd_cli.c,如下所示。我收到对“wpa_ctrl_open”错误的未定义引用
#include "includes.h"
#include <dirent.h>
#include "wpa_ctrl.h"
#include "common.h"
static struct wpa_ctrl *ctrl_conn;
static int hostapd_cli_quit = 0;
static int hostapd_cli_attached = 0;
static const char *ctrl_iface_dir = "/var/run/wpa_supplicant";
static char *ctrl_ifname = …Run Code Online (Sandbox Code Playgroud)我正在编写一个 bash 脚本,旨在更新包含/etc/wpa_supplicant/wpa_supplicant.conf(运行 raspbian 9stretch)的 Raspberry Pi 的 wifi 设置。
根据 Raspberry Pi 官方文档,我正在使用该wpa_passphrase命令,在其中我可以输入所需网络的 ESSID 和密码,然后将其输出附加到现有文件的末尾/etc/wpa_supplicant/wpa_supplicant.conf,然后使用wpa_cli -i wlan0 reconfigure.
这一切都很好,而且效果很好,但我注意到它不会产生任何key_mgmt字段,这与您通过桌面 GUI 手动登录网络不同。
我只是好奇不明确定义该字段是否有任何危害key_mgmt?如果没有它就可以毫无问题地连接网络(至少在我的情况下),它的用例是什么?我通读了wpa和的稀疏文档wpa_supplicant,但它并没有告诉我太多信息。
key_mgmt=WPA-PSK作为参考,如果我通过 RPi 的桌面 GUI 登录,我注意到无论有或没有此字段,网络都可以工作。我测试过的所有网络都有这个共同点。
提前致谢!
我在嵌入式设备上工作,并且正在使用 wpa_supplicant 配置 WLAN 模块(QCA6174 - ath10k 驱动程序)。
我加载驱动程序模块(backports-20151120):
insmod /lib/modules/3.10.65-b2196-h301/wlan/compat.ko;
insmod lib/modules/3.10.65-b2196-h301/wlan/cfg80211.ko;
insmod /lib/modules/3.10.65-b2196-h301/wlan/mac80211.ko;
insmod /lib/modules/3.10.65-b2196-h301/wlan/ath.ko;
insmod /lib/modules/3.10.65-b2196-h301/wlan/ath10k_core.ko skip_otp=y;
insmod /lib/modules/3.10.65-b2196-h301/wlan/ath10k_pci.ko
Run Code Online (Sandbox Code Playgroud)我启动 wpa_supplicant (默认 wpa_supplicant.conf):
wpa_supplicant -dd -Dwext -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf -B
[ 182.257304] IPv6: ADDRCONF(NETDEV_CHANGE): wlan0: link becomes ready
Run Code Online (Sandbox Code Playgroud)一切似乎都工作正常。我看到wlan0接口,我可以用iwlist扫描,/var/run/wpa_supplicant/wlan0存在。
但我无法使用 wpa_cli 接口:
#wpa_cli
wpa_cli v2.4
Copyright (c) 2004-2015, Jouni Malinen <j@w1.fi> and contributors
Selected interface 'wlan0'
Interactive mode
Could not connect to wpa_supplicant: wlan0 - re-trying
Run Code Online (Sandbox Code Playgroud)您有任何提示我如何找出问题吗?
我需要什么: 通过调用 python 脚本连接到 archlinux 上的不同 wifi 网络。
我在做什么: 从 python 执行以下语句:
wpa_passphrase "MySSID" "MyPass"> /etc/wpa_supplicant/profile.conf
wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant/profile.conf
dhcpd wlan0
Run Code Online (Sandbox Code Playgroud)
它仅适用于第一次尝试。第二次执行时,它说 dhcpd 已经打开。我不知道如何切换到另一个网络。
我也试过 wpa_cli 又一次,不知道如何切换到另一个网络。
请提出一些修复或替代方案(不复杂)
我正在使用wpa_supplicant创建一个访问点:
wpa_supplicant -D nl80211 -i wlan0 -c /etc/wpa_supplicant_ap.conf
Run Code Online (Sandbox Code Playgroud)
问题是当在接入点配置设备时,我不允许扫描网络:
iw dev
wlan0 scan command failed: Invalid argument (-22)
Run Code Online (Sandbox Code Playgroud)
或者在wpa_cli中:
> scan
OK
<3>CTRL-EVENT-SCAN-FAILED ret=-22
Run Code Online (Sandbox Code Playgroud)
在dmesg:
[85769.193376] CFG80211-ERROR) __wl_cfg80211_scan : Invalid Scan Command at SoftAP mode
[85769.200133] CFG80211-ERROR) wl_cfg80211_scan : scan error (-22)
Run Code Online (Sandbox Code Playgroud)
而且似乎在wl_cfg80211.c里面:
if (dhd->op_mode & DHD_FLAG_HOSTAP_MODE) {
WL_ERR(("Invalid Scan Command at SoftAP mode\n"));
return -EINVAL;
}
Run Code Online (Sandbox Code Playgroud)
所以问题是如果wifi在HOSTAP中,则不允许扫描.有解决方案吗
我在raspberry-pi上设置了radius-server.现在我想根据http://networkradius.com/doc/FreeRADIUS-Implementation-Ch6.pdf中的 6.2.1条测试它. 不幸的是,构建文档中描述的"eapol_test"文件对我来说不起作用.执行时
make eapol_test
Run Code Online (Sandbox Code Playgroud)
在新创建的文件夹中它运行一分钟左右然后退出,说
/usr/bin/ld: cannot find -lnl
collect2: ld returned 1 exit status
Makefile:1625: recipe for target 'eapol_test' failed
Run Code Online (Sandbox Code Playgroud)
使用较新版本的wpa_supplicant并不能解决问题.我不太了解make命令,或者如何让它找到"-lnl"(无论这可能是什么),我也找不到解决这个问题的方法.
有谁知道如何解决这一问题?先感谢您
我需要从 Python 直接与 wpa_supplicant 交互。据我了解,可以使用Unix套接字和wpa_supplicant控制接口(https://w1.fi/wpa_supplicant/devel/ctrl_iface_page.html)连接到wpa_supplicant。我编写了一个发送 PING 命令的简单程序:
import socket
CTRL_SOCKETS = "/home/victor/Research/wpa_supplicant_python/supplicant_conf"
INTERFACE = "wlx84c9b281aa80"
SOCKETFILE = "{}/{}".format(CTRL_SOCKETS, INTERFACE)
s = socket.socket(socket.AF_UNIX, socket.SOCK_DGRAM)
s.connect(SOCKETFILE)
s.send(b'PING')
while 1:
data = s.recv(1024)
if data:
print(repr(data))
Run Code Online (Sandbox Code Playgroud)
但是当我运行它时,wpa_supplicant报告错误:
wlx84c9b281aa80:ctrl_iface sendto 失败:107 - 传输端点未连接
有人可以提供一个示例,说明如何进行“扫描”然后打印“scan_results”。