MySQL 5.7 解除错误码1819的弱口令

MySQL升到5.7版本后,设置root密码时居然报: ERROR 1819 (HY000): Your password does not satisfy the current policy requirements 搜了下,5.7版本增加了密码强度检测,可以通过口令查看强度和相关信息: SHOW VARIABLES LIKE ‘validate_password%’; +————————————–+——–+ | Variable_name | Value | +————————————–+——–+ | validate_password_dictionary_file | | | validate_password_length | 8 | | … “MySQL 5.7 解除错误码1819的弱口令”

Read More

使用SoftEtherVPN的OpenVPN免流

网上在传的移动流量漏洞确实存在,我之前用的是的Hap本地免流,确实超快,但缺点就是需要root,当然对我而言,我用安卓机子没什么关系,但是家里人如果想要体验的话就麻烦了. 因此云免是不错的一条路子.家里刚好是移动的宽带,刚好是给公网的IP,刚好前段时间入了树莓派.树莓派2B的闲时功耗才2W,一年的功耗: \frac{24\times 365 \times 2}{ 1000}\approx 17.5^{\circ} 家庭用电将近7毛一度电,也就是说连开一年都不到13元钱,而经过我测试,家里的50兆带宽的上下行速度均达到了5MB,也就是说我家目前带宽上下行对等,给移动点赞,移动够良心. 我用手机测试,跳点大约是使用300MB对应扣除2MB,而我一天差不多用1G附近,也就是说,如果一个月的流量套餐是100MB,那我实际可以用到30G起. 废话少说. 首先连上树莓派,关闭树莓派的防火墙,然后去下载SoftEtherVPN的Linux系统的Arm EABI架构版本,并解压: curl -SL – o “softEtherVPN.tgz” –url ‘https://www.softether-download.com/files/softether/v4.17-9566-beta-2015.07.16-tree/Linux/SoftEther_VPN_Server/32bit_-_ARM_EABI/softether-vpnserver-v4.17-9566-beta-2015.07.16-linux-arm_eabi-32bit.tar.gz’ tar -zxf softEtherVPN.tgz 然后进入目录运行程序: cd vpnserver ./vpnserver start 将其加入开机启动脚本/etc/rc.local. 接着在Windows系统中下载SoftEther VPN Manager解压,运行vpnsmgr. 在新设置中填入设置名和主机名,设置名随意,主机名就写树莓派内网地址,端口默认即可. 第一次登陆会提示设置新密码,随后在弹出的SoftEther VPN … “使用SoftEtherVPN的OpenVPN免流”

Read More

树莓派用dnspod的DDNS自动更新公网宽带IP

前不久手痒花二百多大洋入了Raspberry 2B,折腾了几天,突然发现dnspod有更新记录的API,家里的宽带分配的IP又刚好是公网IP,这下可玩性更高了.比如自动将宽带的IP绑定到域名上,通过路由器的端口映射,可以直接访问到家里的所有接入设备,还可以开放一些服务,比如代理/Web服务等. 废话少说. 首先你要有个域名,嗯,巧的是前不久也刚好买了个域名,在Namesilo上买的,新用户首年只要6.9刀,相当于人民币不到五十块,还送隐私保护,这太值了. 然后可以将域名的解析转到其他专业的DNS服务商处,Namesilo虽然也有提供解析,但真心太弱了.我这用的是Dnspod的免费套餐,虽然免费,但其功能依旧强大.接着取一个三级域名名称,记录类型为A类型,值先随便填个IP,TTL设置为10分钟. 到这里就要获取domain_id和record_id了: #获取domain_id,将以下的xxx改为对应的邮箱和密码 curl curl -k https://dnsapi.cn/Domain.List -d “login_email=xxx&login_password=xxx” #获取record_id前,要获取domain_id,将以下的xxx改为对应值即可 curl -k https://dnsapi.cn/Record.List -d “login_email=xxx&login_password=xxx&domain_id=xxx” 然后就可以用以下填入以下代码: # coding:utf-8 import httplib, urllib import socket import time params = dict( login_email=”xxx”, # 邮箱 … “树莓派用dnspod的DDNS自动更新公网宽带IP”

Read More

TCP Fast Open 的实现

前两天重装VPS的时候突然发现Shadowsocks支持[TCP Fast Open 特性],找了会资料才理解这个. TCP Fast Open简称TFO,是谷歌为了加速网络传输速度和效率,其特性就是在三次握手的第一次握手时客户端发送(syn+TFO cookie)包;服务端收到后,如果其支持TFO则发出了(ack+syn+TFO cookie)回应包后,立即就开始发数据包,缩短了TTFB的时间;如果服务端不支持TFO,则会发送正常的(syn+ack)回应包,走正常的三次握手流程. 因此,使用TFO的特性需要两端都支持TFO.客户端侧需要Linux Kernel 3.6及以上版本;而服务端侧则是Linux Kernel 3.7及更高版本才支持.并且服务端侧需要设置内核的net.ipv4.tcp_fastopen参数为2或3. net.ipv4.tcp_fastopen参数释义: 1 表示客户端请求开启. 2 表示服务端请求开启. 3 表示客户端与服务端请求同时开启. 服务端使用命令: echo “net.ipv4.tcp_fastopen=3” >> /etc/sysctl.conf sysctl -p 客户端使用命令: echo “net.ipv4.tcp_fastopen=1” >> /etc/sysctl.conf sysctl -p … “TCP Fast Open 的实现”

Read More

同步和异步 并发和并行

所谓同步(Synchronization),可以理解为在执行完一个函数或方法之后,一直等待系统返回值或消息,这时程序是出于阻塞的,只有接收到返回的值或消息后才往下执行其他的命令. 所谓异步(Asynchronous),则是执行完函数或方法后,无需等待返回值或消息,只需要向系统委托一个异步过程,然后CPU就可以干别的任务去了,而当系统接收到返回值或消息时,系统会自动触发委托的异步过程,从而完成一个完整的流程. 简而言之: 同步就是调用一个函数后必须要函数执行完了才返回. 异步就是被调用函数后,不管函数内的调用完成与否,都会马上返回. 因此,同步的流程往往不适合大并发大流量的程序;而异步的程序,说实话好像都很棒,除了代码比较难写. 并行(parallellism)是指两个或者多个事件在同一时刻发生,如果它的英文释义,是平行发生的. 并发(concurrency)则是指两个或多个事件在同一时段内间隔发生,它可以快速交替任务的处理,但是同一时刻只能有一条指令执行. 并行适用于多线程,而并发往往配合异步.

Read More

理解TCP的握手与挥手

握手 As we know, TCP 相比于 UDP 而言, TCP 提供可靠的连接服务,而它建立一个链接的时候,采用三次握手(three-way handshake),那什么是三次握手呢? For example: 1. 漆黑的夜里,你在路上散步发现对面有个熟人,你想去聊会天,于是你先向对方打了声招呼. 2. 对方听到了你的招呼声,于是也向你回了一声. 3. 你听到了对方的回应,于是向对方挥挥手致意. 第一次握手,你(client)想和对方(server)说话(connect),于是先和对方打了声招呼(syn=j). 第二次握手,对方听到了你的回应,于是并回了一声,表示自己听到了(ack=j+1, syn=k). 第三次握手,你也听到了对方的回应,知道对方已经认出你了,于是挥手表示自己也听到了.(ack=k+1) 很浅显得道理,但非常有效的连接方式.为了保证服务端能收接受到客户端的信息并能做出正确的应答而进行前两次(第一次和第二次)握手,为了保证客户端能够接收到服务端的信息并能做出正确的应答而进行后两次(第二次和第三次)握手. 挥手 要知道,一个socket连接是双工的,两端都可以同时收发,相当于一个连接中存在两条管道.因此TCP在关闭连接的时候,需要将两条管道都关闭. 而如何能确保两条管道都安全的关闭呢? For example: 1. A 和 B已经建立了连接,此时 A 决定要关闭连接了,于是 … “理解TCP的握手与挥手”

Read More

Unix环境下C实现网络抓包

拾起去年扔下的UNIX高级环境编程看了下网络编程章节,对着写了点,废话少说. #include <stdio.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <netinet/ether.h> #define iip2cip(…) inet_ntoa((struct in_addr){__VA_ARGS__}) #define BUFFER_MAX_SZ 2048 typedef struct mac_frm_hdr { //按照以太网帧格式定义,长度必须一致 unsigned char dest_addr[6]; unsigned char src_addr[6]; unsigned short type; }__attribute__((packed)) MAC_FRM_HDR;//取消编译器自动优化对齐结构体,保证与帧中的结构一致. typedef … “Unix环境下C实现网络抓包”

Read More

网络协议粗略复习记录

[TOC] 重新看了点《TCP/IP详解》,粗略的把知识归纳下. 关于分层 网络分层让我很糊涂,有四层协议,五层协议,还有七层协议的. 总所周知,网络协议通常分不同层次进行开发,每一层分别负责不同的通信功能。一个协议族,比如TCP/IP,是一组不同层次上的多个协议的组合。 TCP/IP通常被认为是一个四层协议系统,当然也有人将其分为五层协议的,貌似这么分好像也合理,因为物理设备也确实不能少,还有理论上的OSI七层模型: 越下面的层,越靠近硬件;越上面的层,越靠近用户. 至于每一层叫什么名字,其实并不重要,每一层都是为了完成一种功能. 为了实现这些功能,就需要大家都遵守共同的规则,而大家都遵守的规则,就叫做协议(protocol). 关于协议 网络的每一层,都定义了很多协议.而TCP/IP协议是一个统称,它是一个大家族,不仅仅只有TCP协议和IP协议,它还包括其它的协议,如: 物理层 常见介质有铜绞线、光缆、无线介质(电磁波、微波、红外线) 物理层主要负责基本的信息传输以及传输控制工作。 人们可以使用电线来进行传输,也可以使用光纤来进行传输,甚至可以是无线电磁波. 对于不同的介质,产生的信号也是不同的,物理层就是要规定介质和信号的规范. 常见接口规范: RS-232(串口)、FDDI、IEEE802.3z、IEEE802.3ae、IEEE802.11 链路层 使用物理连接后的设备,通过高低频的电子信号传输信息,然后接收端的设备通过特定的算法识别这些信号.早期的时候,每家公司都有自己的电信号分组方式,十分混乱,由此成立了 IEEE 802委员会 来制定数据由物理层到链路层相关的一系列标准.再之后,IEEE802系列标准中叫做 802.3 “以太网”(Ethernet)RFC 894的协议,逐渐地占据了主导地位. 以太网协议规定: 1. 一组电信号构成一个数据包,叫做”帧”(Frame).每一帧分成两个部分: 标头(Head),数据(Data),尾部校验(CRC). 2. “标头”包含数据包的一些说明项,包括目的地址(6字节),源地址(6字节),类型(2字节).其总长度固定为 14 字节,. 3. … “网络协议粗略复习记录”

Read More