5月 08

Did not receive identification string from 127.0.0.1 port 问题处理

安装frp服务ssh穿透内网,系统日志中报大量 Did not receive identification string from 127.0.0.1 port xxxx 。由于都是内网地址,所以不是攻击或扫描。此问题是由于服务自动检查穿透端口服务器是否健康引起。

代码位置
frp/client/proxy/proxy_wrapper.go 89 行

2个简单解决方案,只是缓解。

1.延长检查服务时间 frp客户端配置 ,进行延长,单位为妙
health_check_interval_s = 10

2.降低ssh日志记录级别

3月 31

[转载]tornado判断登录和操作权限(装饰器)

判断是否有操作权限

def with_permission(permission):
''''''
 
def _decorator(method):
''''''
@functools.wraps(method)
def wrapper(self, *args, **kwargs):
''''''
user = self.current_user # 这里判断用户是否存在(登录)
if not user:
self.set_status(404)
return
 
if permission in user.permission_list: # 判断用户是否有足够的权限
method(self, *args, **kwargs)
else:
data = {"error": "need permission:%s" % permission}
self.write_json(data, status=403)
return wrapper
return _decorator

转载地址:https://www.bbsmax.com/A/x9J2DbAWd6/

2月 24

esp8266做AP启动WEB服务器控制led

配置ap。

import network
ap_if = network.WLAN(network.AP_IF)
ap_if.config(essid="simonzhang.net", authmode=network.AUTH_WPA_WPA2_PSK, password="simon")

代码部分,保存为main.py上传到板子上,重启。

import machine
pins = [machine.Pin(i, machine.Pin.IN) for i in (0, 4, 5)]

html = """
HTTP/1.0 200 OK



    
    
    www.simonzhang.net test
    

    %s
    

GPIO0  

GPIO4  

GPIO5  

""" def indexHandle(rtype, argv): if rtype == 'GET': try: num = argv.split('=')[1] except: num = 9999 if num == 9999: pass else: num1 = num[:-1] num2 = num[-1] if num1 == "OFF": machine.Pin(int(num2), machine.Pin.OUT, value=0) elif num1 == "ON": machine.Pin(int(num2), machine.Pin.OUT, value=1) rows = ['%s%d' % (str(p), p.value()) for p in pins] return html%'\n'.join(rows) def pinHandle(rtype, argv): print(rtype) print(argv) def route(getData): rtype = getData[0].split()[0] path = getData[0].split()[1] if path.find('?') > -1: urlPath = path.split('?')[0] argv = path.split('?')[1] else: urlPath = path argv = '' rou = {'/' : indexHandle(rtype, argv)} try: htmlContext = rou[urlPath] except: htmlContext = html%'error' return htmlContext import socket addr = socket.getaddrinfo('0.0.0.0', 8888)[0][-1] s = socket.socket() s.bind(addr) s.listen(1) while True: cl, addr = s.accept() cl_file = cl.makefile('rwb', 0) tmp = '' line = '' while True: line = cl_file.readline() tmp = '%s%s' % (tmp, line.decode('utf-8')) if not line or line == b'\r\n': break cl.send(route(tmp.split('\r\n'))) cl.close()

esp8266we控制led源码

连接ap,用浏览器登录192.168.4.1:8888端口


控制led成功。

2月 18

raspberry pi2 安装pyqt 实验

需求:用raspberry做主机,linux操作系统。连接显示器,展示宣传内容,定时刷新。
使用的设备是raspberry pi2 B+ ,python2.7,使用pyqt4做图形化界面。最初本来想用自带的tk,但是不能嵌入web浏览器。如果调用操作系统的浏览器,如果将来要放大、屏蔽按钮等等扩展就不方便了。

首先安装PyQt4开发包
$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get install python-dev
$ sudo apt-get install qt4-dev-tools

下载并安装SIP
$ wget https://sourceforge.net/projects/pyqt/files/sip/sip-4.17/sip-4.17.tar.gz
$ tar vxf sip-4.17.tar.gz
$ cd sip-4.17
$ python configure.py
$ make all
$ sudo make install
下载安装PyQt4
$ wget https://sourceforge.net/projects/pyqt/files/PyQt4/PyQt-4.11.4/PyQt-x11-gpl-4.11.4.tar.gz
$ tar vxf PyQt-x11-gpl-4.11.4.tar.gz
$ cd PyQt-x11-gpl-4.11.4
$ python configure.py
$ make all # 耗时real 113m20.864s
$ sudo make install

python代码

#!/bin/env python
# -*- coding:utf-8 -*-
# -------------------------------
# Date:        2016-02-17
# Author:      simonzhang
# Web:         www.simonzhang.net
# Email:       simon-zzm@163.com
# -------------------------------
import sys
from PyQt4.QtWebKit import QWebView
from PyQt4.QtGui import QApplication, QDesktopWidget, QMainWindow
from PyQt4.QtCore import QUrl
# 创建应用
app = QApplication(sys.argv)
# 获取桌面分辨率
getSize = QDesktopWidget().availableGeometry()
w = getSize.width()
h = getSize.height()
# 创建并连接web服务器
browser = QWebView()
browser.load(QUrl(sys.argv[1]))
browser.show()
# 重新设置浏览器大小
browser.resize(w, h)
# 启动应用
app.exec_()

测试:再Linux桌面下在控制台输入

python testPyQt.py http://www.simonzhang.net/test.html

显示正常,需要展示的内容做html页面就可以了。自动刷新部分也写在页面里,一分钟刷新一次。将

放在页面head里面。

随桌面自动带起来。编辑桌面启动的账户下配置.profile

if [ $DISPLAY == ":0" ];then
    python Desktop/testPyQt.py http://www.simonzhang.net/test.html
fi

最终效果
pyqt4刷新

官方pyqt5不支持python2了,只能用python3,但是本人一直在用python2。所以也编译了一下PyQt5做测试。
$ sudo apt-get install qt5-default
两个包地址如下,安装编译方法和上面相同
http://downloads.sourceforge.net/project/pyqt/sip/sip-4.17/sip-4.17.tar.gz
https://sourceforge.net/projects/pyqt/files/PyQt5/PyQt-5.5.1/PyQt-gpl-5.5.1.tar.gz
编译耗时 120m40.725s

简单测试正常。估计细节还是会有问题。如果要用pyqt5还是直接用python3比较好。此处只为测试。

4月 10

debian7安装virtualbox

debian7 操作系统64位,安装virtualbox非常简单命令如下。
echo “deb http://download.virtualbox.org/virtualbox/debian wheezy contrib” >> /etc/apt/sources.list.d/virtualbox.list
wget -q http://download.virtualbox.org/virtualbox/debian/oracle_vbox.asc -O- |apt-key add –
apt-get update
apt-get install virtualbox virtualbox-dkms

可以用命令行操作,但是有点麻烦,使用到图形化界面很简单。在安装一个Vncserver,直接图形化管理即可。
如果要使用命令行管理,可以查询vboxmanage等以vbox开头的命令。