关键字:AT、指令、TCP
时间:2019年5月

指令

发:AT
收:OK

发:AT+CPIN?
收:+CPIN: READY
收:OK

发:AT+CSQ
收:+CSQ: 15,0
收:OK

发:AT+CGREG?
收:+CGREG: 0,1
收:OK

发:AT+CIPMUX?
收:+CIPMUX: 0
收:OK

发:AT+CIPMUX=1
收:OK

发:AT+CIPMODE?
收:+CIPMODE: 0
收:OK

发:AT+CGATT?
收:+CGATT: 1

发:AT+CGATT=1
收:OK

发:AT+CSTT?
收:+CSTT: "CMNET","",""
收:OK

发:AT+CSTT="CMIOT"
收:OK

发:AT+CIICR
收:OK

发:AT+CIFSR
收:10.113.91.97

发:AT+CIPSTART=1,"TCP","1.2.3.4",9999
收:OK
收:CONNECT OK

发:AT+CIPSEND=1,10
收:> 
发:abcdefhijk
收:1, SEND OK

收:+RECEIVE,1,6:
收:12345

发:AT+CIPCLOSE
收:CLOSE OK

发:AT+CIPSHUT
收:SHUT OK

注:
1、CSTT、CIPMUX、CIPMODE修改都需要在CGATT=1之前,或CIPSHUT之后;
2、CIPSHUT之后需CGATT=1,才能再次CIICR。

关键字:golang、发邮件
时间:2019年5月

代码

package main

import (
	"log"
	"net/smtp"
	"strings"
)

func main() {
	log.Println("start...")

	addr := "smtp.163.com:25"
	a := smtp.PlainAuth("", "user2019", "password", "smtp.163.com")
	from := "user2019@163.com"
	to := []string{"12345678@qq.com"}
	msg := "To: "
	msg = msg + strings.Join(to, ",")
	msg = msg + "\r\nFrom: " + from
	msg = msg + "\r\nSubject: " + "test5"
	msg = msg + "\r\n\r\n" + "This is a test mail."
	err := smtp.SendMail(addr, a, from, to, []byte(msg))
	if err != nil {
		log.Println(err)
		return
	}
}

注:smtp.PlainAuth的第二个参数是账户名,某些邮箱不需要加“@xxx.com”,某些邮箱需要加。

关键字:ssh、局域网、公网、反相连接
时间:2019年5月

原理

原理流程如下:
1、局域网主机先发起一个ssh请求登录公网主机,这个ssh登录不提供命令行输入,而是在登录的主机上打开一个tcp端口进行监听;
2、当有请求访问这个tcp端口时,数据会通过已经建立的连接转发到局域网主机上指定的端口,如果这个局域网主机上指定的端口是22端口,那么就实现了ssh登录到局域网。

准备

主机 IP
公网 1.2.3.4
局域网 192.168.1.100

公网主机

安装ssh服务端和客户端

root@www:~# apt-get install openssl-server
root@www:~# apt-get install openssl-client
root@www:~# adduser user1
...

注:由于会在局域网主机上建立免密登录,为保障公网主机安全,建议添加一个新用户用于远程登录。

局域网主机

只用ssh客户端本身是能够实现这个功能的,单次可以直接使用ssh。如果要长期保持能够远程登录,就需要用到autossh工具。

root@debian:~# apt-get install autossh
root@debian:~# ssh-keygen
...
root@debian:~# ssh-copy-id user1@1.2.3.4
...
root@debian:~# autossh -M 4567 -NR 8022:localhost:22 user1@1.2.3.4

注:
“-M 4567”是autossh监控会用到的一个端口,任意都可以只要不冲突;
“-NR 8022:localhost:22”是指在远端监听8022端口,并且8022端口来的数据转发到“localhost:22”;
“user1@1.2.3.4”是ssh访问的用户和主机

远程访问

在公网主机上

root@debian:~# ssh user1@127.0.0.1 -p 8022
password:

高级用法

主机 IP
公网 1.2.3.4
局域网主机A 192.168.1.100
局域网主机B 192.168.1.110

在局域网主机A上执行脚本

root@hostA:~# autossh -M 4567 -NR 8022:192.168.1.110:22 user1@1.2.3.4

注:当在公网上ssh连接8022端口时,其实访问的是局域网主机B。

关键字:zabbix、监控、股价
时间:2019年5月

一、准备

1、主机

一台Linux操作系统主机,内存1G以上,硬盘20G以上,能够访问Internet。

2、邮箱

a、发件邮箱

一个发件的邮箱,用于Zabbix发送提醒邮件。因为发件邮箱的密码会填写到Zabbix系统中,所以建议使用一个闲置邮箱或新申请一个邮箱作为发件邮箱,从而减少安全隐患。

b、收件邮箱

一个收件的邮件,用于接收Zabbix发送的提醒邮件。建议使用139邮箱作为收件箱,由于139邮箱可配置短信提醒,因此zabbix邮件提醒同时具备了短信提醒功能,并且短信提醒免费。

二、安装Zabbix

在准备的主机上安装Zabbix服务器。详细安装步骤请查阅https://www.zabbix.com,此处不做详细介绍。

三、配置

1、股票实时价格获取脚步

编辑文件/root/getprices.sh

#!/bin/sh
for i in $(wget -qO- http://hq.sinajs.cn/list=sz002008,sh600660|awk '{print $2}')
do
	echo `echo $i | awk -F '[\"]' '{print $2}'` > /tmp/`echo $i | awk -F '[_=]' '{print $3}'`
done

注:此脚本抓取股票实时价格,sz002008和sh600600是股票代码,可以自行添加,逗号隔开即可。此脚本执行后,会在/tmp目录下生成以股票代码为文件名的文件,文件内容即是价格相关数据。

2、定时执行脚本

root@debian:~# crontab -e
# m h  dom mon dow   command
30-59 9 * * 1,2,3,4,5 /bin/sh /root/getprices.sh
0-30 11 * * 1,2,3,4,5 /bin/sh /root/getprices.sh
*/1 10,13,14 * * 1,2,3,4,5 /bin/sh /root/getprices.sh
:wq

注:每周一至五,开盘时间9:30~11:30和13:00~15:00每分钟抓取一次数据。

3、Zabbix Agent采集数据

root@debian:~# vim /etc/zabbix/zabbix_agent.conf
...
UserParameter=stock.price.code[*],awk -F ',' '{print $$4}' /tmp/$1
UserParameter=stock.chg.code[*],awk -F ',' '{print 100*($$4-$$3)/$$3}' /tmp/$1
...
:wq
root@debian:~# systemctl restart zabbix-agent

4、Zabbix服务器配置监控项

* 打开zabbix的web页面,http://192.168.1.100/zabbix,用户名Admin,密码zabbix。
* 点击Configuration(配置)-> Hosts(主机)-> Zabbix Server/Items -> Create Item
* 主要参数
Name: 600660 price
Key: stock.price.code[sh600660]
Type of information: Numeric(float)
Update interval: 60s
注意:Key需要和UserParameter对应起来。

* 点击“`Add“`按钮

5、Zabbix服务器配置触发器

* 打开zabbix的web页面
* 点击Configuration(配置)-> Hosts(主机)-> Zabbix Server/Items -> Create trigger
* 主要参数
Name: sh600660 price > 23.00
Problem expression: {Zabbix server:stock.price.code[sh600660].last(#1)}>23.00
* 点击“`Add“`按钮

6、Zabbix服务器配置邮件提醒

a、配置发件邮箱

* 依次点击Administration(管理)-> Media types(媒介)-> Email
* 填写邮箱相关信息
* 点击“`Update“`按钮

b、配置发邮件动作

* 依次点击Configuration(配置)-> Actions(动作)-> Report problems to Zabbix administrators
* Enable打勾
* 点击“`Update“`按钮

c、配置管理员账户邮箱

* 依次点击Administration(管理)-> Users(用户) -> Admin
* 点击“`Media“`标签页
* 点击“`Add“`链接,添加邮箱
* 点击“`Update“`按钮保存

结束

整个配置已经完成,当600660的价格高于23元时,你就会收到邮件了。