蹭了学生优惠,买了个阿里云轻服务器,5M带宽转国外线路减少丢包概率还不错,ns联机美滋滋,不过据说港服联机服务要出了,不知道联机质量会怎么样

firewall中继栗子

# 打开ip伪装
firewall-cmd --add-masquerade --permanent

# 添加端口协议
firewall-cmd --add-forward-port=port=中转后的端口:proto=tcp:toport=酸酸乳端口:toaddr=酸酸乳地址 --permanent
firewall-cmd --add-forward-port=port=中转后的端口:proto=udp:toport=酸酸乳端口:toaddr=酸酸乳地址 --permanent

# 重载一下
firewall-cmd --reload

koolshare里面大家好像用的都是StarWind V2V Converter这款软体,再就是用PE里面的写盘工具

然鹅,在macos不能玩这些windows的工具,搜索发现virtual box自带的命令集,真香!

VBoxManage --help一下什么都有,新建,修改,删除,网络适配器,DHCP,共享文件夹...

.img转换.vdi脱离GUI,shell冲冲冲!

$ VBoxManage convertdd openwrt-koolshare-mod-v2.22-r8838-af7317c5b6-x86-64-combined-squashfs.img 1.vdi

一个虚拟机转盘完成,秒转

最近在捣鼓golang,其中用线上数据全放在redis里,以前写死的配置有点不太适合了,热加载才是王道!

俗话说不会搜索的程序员不是一个好程序员(误

观摩了一下其他大佬的写法,大多都是采用定时器+goroutine实现的。难度不大,开始码

配置文件结构体

假设一下我们的配置文件是json文件,那应该就是下面这样

// conf.json
{
  "host": "127.0.0.1",
  "port": 6379,
  "passwd": "",
  "db": 0
}

首先肯定是要写一个跟它一模一样的结构体出来

//json配置文件结构体
type Content struct {
    Host   string `json:"host"`
    Port   int    `json:"port"`
    Passwd string `json:"passwd"`
    Db     int    `json:"db"`
}

如果继续在此结构体上编写操作函数不太稳妥,序列化json也是直接操作的指针。之前拆散它们的试错,最后还是让它们在一起了233

优化结构体

将文件名,同步锁,最后修改时间,配置文件结构体整合一起

//配置结构体
type Config struct {
    Filename       string
    LastModifyTime int64
    Lock           *sync.RWMutex
    Data           interface{}
}

编写实例配置的工厂函数(这个有点约定俗成的规矩,具体出处你们自己去考证吧,好处挺多的)

func NewConfig(filename string, data interface{}) *Config {
    conf := &Config{
        Filename: filename,
        Data: data,
        Lock: &sync.RWMutex{},
    }

    conf.parse()

    go conf.reload()

    return conf
}

这里把配置结构体配置了默认参数,外部传入参数是配置文件的文件名配置文件结构体,这里data的类型为接口类型,好处是Config可以独立出来,代码多处复用。我们还使用了conf.parse()方法,第一次解析文件,go conf.reload()方法单独起一个goroutine跑(具体效果看后面),结果当然返回本体了

- 阅读剩余部分 -

这段时间在捣鼓tars框架,去vultr开了个3.5刀的机器,为什么要用他们家的呢,因为之前冲的50刀没用完😂无奈呀

他家的机器对湖北电信非常不友好,创建必须要装bbr不然丢包够你受的,加大发包量,用的还挺爽的

这两天空闲了下,上线登陆发现有1w+的暴力登陆!!!

wtf!

network-attacks.png

第一次感受到这么泛滥的网络攻击,今天简单介绍一下修改sshd监听端口防范暴力破解

这里我开始就把selinux关掉了,你可以选择关闭selinux,因为会少很多麻烦事,当然也会产生隐形的问题,不过利大于弊

系统版本

  • 发行版: CentOS Linux release 7.5.1804 (Core)
  • 内核: kernel-ml-4.19.6-1.el7.elrepo.x86_64

起步

  1. 检查selinux的开启状态

    $ /usr/sbin/sestatus -v
    # 看到disabled说明是关闭的,直接看第三步
  2. 关闭selinux

    # 临时关闭(推荐)
    $ setenforce 0
    # 永久关闭
    $ vim /etc/selinux/config
    # 修改为SELINUX=disabled,注意这里需要重启生效

- 阅读剩余部分 -

疑问

如果之前做过微信jssdk,初看文档会发现没有什么,流程无非就是后端签名,返还给前端

但是仔细想了想,没有配置物品的价值信息呀,在公众号h5页面也只是返还了签名

回头看看请求参数发现了端倪

微信订单id

一开始看示例值我理解的随便一串数字,其中的prepay_id统一下单接口返回结果中的参数

重新开始书写逻辑

在这里我们使用的是h5支付,返回结果为 https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb?prepay_id=wx151809054027204613d0ca330422xxxxxx&package=287231xxxx

只能采用截取url的方式了,获取到的prepay_idwx151809054027204613d0ca330422xxxxxx

prepay_id发回后端进行签名,返回

{
  "code": 1,
  "msg": "获取微信浏览器支付签名成功",
  "data": {
    "appId": "wx54c4e3c9a7xxxxxx",
    "timeStamp": "1537007685",
    "nonceStr": "5b9ce0458db30",
    "package": "prepay_id=wx151809054027204613d0ca330422xxxxxx",
    "signType": "MD5",
    "paySign": "A819D6551E9E3FE62BE612FA96000000"
  }
}

现在前端就可以愉快的使用WeixinJSBridgeJSSDK


相关链接:

微信内H5调起支付
微信统一下单

出现invalid signature错误的情况真的很迷

  1. 文档最开始说不需要转义,后来我看到错误相关,说需要encodeURIComponent(location.href.split('#')[0])
  2. wx.config()中的nonceStr与后端进行签名时的noncestr不一样
  3. 动态获取url这个地方描述的很迷,没明确说明是需要使用后端提供签名的接口还是,前端发起请求时的url

总之就是,要使用ajax签名,前端需要encodeURIComponent(location.href.split('#')[0])将当前url作为参数,传入后端签名接口,后端如果是php,需要urldecode($_GET['url']),再来获取jsapi_ticket进行签名,返回参数