我尝试将 SSL 与 MQTT 结合使用并收到以下错误,
1379677998: Client connection from 127.0.0.1 failed: error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number.
1379678058: OpenSSL Error: error:140940E5:SSL routines:SSL3_READ_BYTES:ssl handshake failure
1379678058: Socket read error on client (null), disconnecting.
Run Code Online (Sandbox Code Playgroud)
我的conf文件有如下设置,
port 8883
cafile /home/administrator/Downloads/mosquitto-1.2.1_dilip/test/ssl/test-root-ca.crt (also tried all-ca.crt here)
certfile /home/administrator/Downloads/mosquitto-1.2.1_dilip/test/ssl/server.crt
keyfile /home/administrator/Downloads/mosquitto-1.2.1_dilip/test/ssl/server.key
tls_version tlsv1
require_certificate true (tried commenting this too)
Run Code Online (Sandbox Code Playgroud)
我从测试文件夹运行 08-ssl-connect-cert-auth.test 。下面包含代码片段
mosquitto_tls_opts_set(mosq, 1, "tlsv1", NULL);
mosquitto_tls_set(mosq, "../ssl/test-root-ca.crt", "../ssl/certs", "../ssl/client.crt", "../ssl/client.key", NULL);
mosquitto_connect_callback_set(mosq, on_connect);
mosquitto_disconnect_callback_set(mosq, on_disconnect);
rc = mosquitto_connect(mosq, "localhost", 8883, 60);
Run Code Online (Sandbox Code Playgroud)
环境信息:
Python 2.7.3
OpenSSL 1.0.1 14 …Run Code Online (Sandbox Code Playgroud) 我正在开发一个将使用mqtt的应用程序.我将使用python库.我一直倾向于使用mosquitto,但却无法以编程方式为其设置访问控制限制.我正在编写的应用程序需要能够区分用户,并且只允许他们订阅某些主题.当前的解决方案看起来像是从配置文件中完成的.在mosquitto中是否有可扩展的访问控制限制解决方案?如果没有,你知道一个mqtt经纪人存在吗?
我有一个python模块,其中包含各种数据文件(代表曲线的一组csv文件),需要在运行时加载。csv模块效果很好
# curvefile = "ntc.10k.csv"
raw = csv.reader(open(curvefile, 'rb'), delimiter=',')
Run Code Online (Sandbox Code Playgroud)
但是,如果我将此模块导入另一个脚本,则需要找到数据文件的完整路径。
/project
/shared
curve.py
ntc.10k.csv
ntc.2k5.csv
/apps
script.py
Run Code Online (Sandbox Code Playgroud)
我希望script.py仅按基本文件名而不是完整路径来引用曲线。在模块代码中,我可以使用:
pkgutil.get_data("curve", "ntc.10k.csv")
Run Code Online (Sandbox Code Playgroud)
可以很好地找到文件,但是它返回已读入的csv文件,而csv.reader需要文件句柄本身。有什么方法可以使这两个模块一起正常工作?它们都是标准的库模块,因此我并不是真的期望出现问题。我知道我可以开始拆分pkgutil二进制文件数据,但是那样的话我也可能不使用csv库。
我知道我可以只在模块代码中使用它,而不必理会pkgutils,但看起来pkgutils确实正是此目的。
this_dir, this_filename = os.path.split(__file__)
DATA_PATH = os.path.join(this_dir, curvefile)
raw = csv.reader(open(DATA_PATH, "rb"))
Run Code Online (Sandbox Code Playgroud) 我在使用ctypes绑定时遇到问题,并且ctypes文档使我的头部有点受伤。
我有一个远程网络客户端正在发送二进制数据,而我正在使用的库(Mosquitto,用于MQTT消息代理)提供了一种ctypes方法,用于从网络获取原始二进制数据。这是“ LP_c_ubyte”类型。有什么有效的方法可以将其转换回python'str'对象?
我需要一组常规字节来用于M2Crypto的解密功能。
pp = ''.join(chr(msg.payload[i]) for i in xrange(msg.payloadlen))
clear_text = rsa.private_decrypt(pp, M2Crypto.RSA.pkcs1_padding)
Run Code Online (Sandbox Code Playgroud)
这有效,但是非常难看。
我可以将客户端更改为首先对所有内容进行base64编码,然后在此端取消对unbase64的编码,但这似乎也可以解决。
有没有更好的方法?