小编Zal*_*aPL的帖子

在Linux上从Python连接到受保护的WiFi

我正在为Ubuntu Linux创建一个需要连接到WiFi AP的软件.WiFi网络不是预定义的,并且可以在软件的单次运行期间多次改变(用户是订购改变的用户).这个想法是这样的:给定一组SSID及其WPA或WEP密码,软件应该能够随心所欲地在网络之间切换,而无需在系统中的任何地方更改任何配置文件.

看起来,一个巨大的问题是将密码短语传递给连接.这是我到目前为止一直在使用的内容:

  • Ubuntu 12.10机器配备了WiFi加密狗.
  • Python,运行该软件,将用于请求连接
  • 康纳曼0.79
  • wpa_supplicant v1.0
  • d总线

起初我以为可以通过d-bus将密码传递给connman,但是这个版本的connman和1.11似乎都没有公开任何方法.然后我发现可以将service_<SSID>.conf文件转储到/var/lib/connman/目录中.该文件的内容非常简单,如下所示:

[service_SSID]
Type=wifi
Name=Network-SSID
Passphrase=here-goes-the-passphrase
Run Code Online (Sandbox Code Playgroud)

创建此文件后,连接到网络需要在适当的服务中简单调用net.connman.Service.Connect()方法.问题是connman不会解析配置文件,除非它重新启动.这需要sudo特权,额外的时间,并且会增加所有"现在可能出错的事情"发生的风险.然后我认为密码可以以某种方式传递给wpa_supplicant d-bus API,但我找不到任何东西.

谷歌搜索也让我失望了.就好像以前没有人试图这样做过.

命令sudo iwconfig wlan0 essid <SSID> key s:<PASSPHRASE>导致SET failed on device wlan0 ; Invalid argument.错误.此外,它需要sudo,我想避免.

我试图找出wpa_gui程序如何发挥其魔力.首先,我发现它还需要sudo,并且它直接发送一堆命令/var/run/wpa_supplicant/wlan0.如果我没有弄清楚任何简单的事情,复制这种行为将是我的最后手段.

所以,最大的问题是:如何使用Python连接到受WEP/WPA保护的WiFi网络?
我也想知道在这里使用connman是否是一个好方法,如果我不应该恢复到网络管理器,这是Ubuntu的默认设置.

python linux wifi wpa

10
推荐指数
1
解决办法
9299
查看次数

C++:从不同目录中清除并动态加载DLL

我想要实现的长篇故事

我正在研究一个动态加载DLL作为插件的程序.我正在使用Microsoft Visual C++ 2008编译程序.但是,我们假设应该支持任何与Qt一起工作的Visual C++版本.程序目录布局如下:

| plugins/
|   plugin1.dll
|   plugin2.dll
| QtCore4.dll
| QtGui4.dll
| program.exe
Run Code Online (Sandbox Code Playgroud)

program.exe发现所有插件DLL文件,对它们执行LoadLibrary()并调用某个签名函数来查明它是否实际上是一个插件.这对于安装了MSVC90的vcredist的计算机非常有效.当然,要使程序在所有计算机上运行,​​我必须使用msvc*.dll文件和相应的清单文件重新分发它.Qt DLL还需要redist才能运行.

现在,我已经设置了cmake来根据所选的Visual Studio版本自动复制适当的redist DLL和manifest.为了简单起见,让我们继续假设我正在使用MSVC90.当redist被复制到程序目录时,布局如下所示:

| plugins/
|   plugin1.dll
|   plugin2.dll
| QtCore4.dll
| QtGui4.dll
| msvcm90.dll
| msvcp90.dll
| msvcr90.dll
| Microsoft.VC90.CRT.manifest (I'm also aware that this file is bugged in VS2008)
| program.exe
Run Code Online (Sandbox Code Playgroud)

关于清单文件中的错误:http://www.cmake.org/pipermail/cmake/2008-Stembertember/023822.html

问题

具有此布局的程序现在可以在没有安装redist的计算机上运行,插件没有加载.为了让插件加载,我必须执行以下操作之一:

  1. 将清单文件复制到plugins/目录.从清单文件中删除对msvc*.dll文件的所有引用.这有效,但它并不好,因为我必须支持不同版本的已编辑清单文件,具体取决于使用的MSVC的版本.此外,我不知道这是否会在2008年以外的Visual Studio中破坏.
  2. 将整个redist复制到plugins/目录.这不需要对清单文件进行任何修改,但现在program.exe愚蠢地尝试加载msvc*.dll文件,认为它们是插件.当然,这会优雅地失败,所以不会造成太大的伤害.另一个缺点是程序包的大小增加了1 MB以上.不过,这两个问题都是我可以接受的.
  3. 使用/ MT开关编译插件.简短的测试表明,这实际上是有效的,但我不确定将来如果Qt和program.exe/ MD 都不会破坏任何东西.

问题

什么是最好的解决方案?什么是正确的解决方案?如果有多个正确的解决方案,那么这是最佳做法?我是第一个尝试这样做的人吗? …

c++ dll manifest loadlibrary vcredist

8
推荐指数
1
解决办法
1316
查看次数

Emacs:无法通过MELPA自动启动弹丸

我是emacs的新手.事实上,我正在学习编辑器并尝试设置一些可以复制"转到项目内部的文件"的功能,这些功能可以从Code :: Blocks或记事本++的某些插件中获知.

'projectile'满足了这个需求,我通过MELPA安装了它.正确安装包,因为我可以启动它M-x projectile-global-modeC-c p识别命令.

但是,如果我将它放入我的.emacs文件中,Emacs会以错误开头:

Symbol's function definition is void: projectile-global-mode
Run Code Online (Sandbox Code Playgroud)

我的.emacs文件内容如下:

(custom-set-variables
  ;; custom-set-variables was added by Custom.
  ;; If you edit it by hand, you could mess it up, so be careful.
  ;; Your init file should contain only one such instance.
  ;; If there is more than one, they won't work right.
 )
(custom-set-faces
  ;; custom-set-faces was added by Custom.
  ;; If you edit it by hand, …
Run Code Online (Sandbox Code Playgroud)

emacs autostart melpa

5
推荐指数
1
解决办法
1319
查看次数

标签 统计

autostart ×1

c++ ×1

dll ×1

emacs ×1

linux ×1

loadlibrary ×1

manifest ×1

melpa ×1

python ×1

vcredist ×1

wifi ×1

wpa ×1