Hshen

人若无名 便可潜心练剑

0%

手头有一台MacBook,使用Windows用的是WTG+固态U盘,也挺方便的;但是吧自从看到这个机箱便使我有了装一台ITX的想法;

先上配置单

硬件 品牌 价格 渠道
内存 金士顿骇客神条16x2 PDD
CPU 12400 PDD
主板 Asus b660i PDD
硬盘 三星 980 1T JD
散热 Axp90 full TB
CPU扣具 Lzmod TB
硅脂 利民 PDD
1700扣具 利民 PDD
电源 海盗船 白金SF600 TB
机箱 机甲A4 TB
CPU散热风扇 猫头鹰A12 PDD
机箱散热风扇 猫头鹰A9 PDD
机箱散热风扇罩 TB
显卡 微星万图师3050 JD

图片鉴赏

9月份搬家小区需要门禁,去物业录人脸已经录满了只能办门禁卡,20RMB一个,好在中介给了一个,但是上下班的我们2个着实不方便,想到以前买的神器ACR122,那就动手造一个吧;

  • 工具ACR122、CUID卡
  • IC卡操作软件(万能的度娘)

卡片类型介绍

卡类型 芯片名称 频率 擦写 说明
反复 UID复制卡 13.56MHZ 反复擦写 不过防火墙,经典复制卡,魔术卡,可以反复擦写
反复 CUID复制卡 13.56MHZ 反复擦写 过90%防火墙,UID卡复制成功刷卡无效的情况下,可使用此卡复制,电梯卡建议购买此卡
反复 FUID复制卡 13.56MHZ 只可写入一次 过95%防火墙,CUID卡复制成功刷卡无效情况下,可使用此卡复制 一次性写入锁卡,不支持反复擦写
反复 UFUID复制卡 13.56MHZ 只可写入一次 过95%防火墙,功能和FUID卡一样,区别自安于此卡支持手动锁卡,没有锁卡前就是一张UID卡,可以理解为高级UID卡,锁卡后不支持擦写
反复 IC授权卡 13.56MHZ 不可擦写 过98%防火墙,普通卡,0(卡号块)出厂为锁定状态不可用于复制,只能授权,物业卡均为此卡,俗称授权卡

开搞

1、连接读卡器(会听到滴的一声)

2、读卡破解(破解成功如下图所示)

会在当前目录下生成一个dump扩展名文件
3、更改卡ID

块0 8AFFC866DB0804006263646566676869 是买的CUID卡的原始ID,我们修改为门禁卡ID

4、查看卡ID是否修改成功

我们看到0扇区的 0块的ID已经改变
5、写入卡信息

导入刚才破解的 dump文件,把它写入到新卡里面
6、查看写入的数据和原始卡是否有出入

至此完美的复制了一张门禁卡;
7、每次带卡扣不太方便于是乎买了一张超薄的手机卡贴

友情提示

  • 曾经我尝试过不修改卡ID只复制数据门禁卡是不能用的

想在docker-compose里面配置nginx的变量,参考了dockerhub nginx的文档文档地址 内容如下

1
2
3
4
5
6
7
8
9
10
11
# 官方Demo
web:
image: nginx
volumes:
- ./mysite.template:/etc/nginx/conf.d/mysite.template
ports:
- "8080:80"
environment:
- NGINX_HOST=foobar.com
- NGINX_PORT=80
command: /bin/bash -c "envsubst < /etc/nginx/conf.d/mysite.template > /etc/nginx/conf.d/default.conf && exec nginx -g 'daemon off;'"

按照官方给的文档我顺利的解决了NGINX传递变量的问题,但是配置文件mysite.template里面比如有些NGINX自己的变量比如 $request_uri、$server_name 都会被替换为空,既然这样我们就替换我们需要的变量

1
2
3
"envsubst < /etc/nginx/conf.d/mysite.template > /etc/nginx/conf.d/default.conf && exec nginx -g 'daemon off;'"
# 将上面的代码修改为
"envsubst '$NGINX_HOST $NGINX_PORT' < /etc/nginx/conf.d/mysite.template > /etc/nginx/conf.d/default.conf && exec nginx -g 'daemon off;'"

但是这样并没解决我的问题,NGINX报错找不到这个变量,又是一顿谷够,找到了一片文档传送门按照大神的意思是需要对变量转义,$$NGINX_HOST $$NGINX_PORT

1
"envsubst '$$NGINX_HOST $$NGINX_PORT' < /etc/nginx/conf.d/mysite.template > /etc/nginx/conf.d/default.conf && exec nginx -g 'daemon off;'"

至此顺利的解决了我的问题.

获取 raspbery CPU RAM DISK IP 信息,驱动ssd1306

Luma.OLED

Luma.OLED github

1
2
3
# 安装驱动
$ sudo apt install python-dev python-pip libfreetype6-dev libjpeg-dev build-essential libopenjp2-7 libtiff5
$ sudo -H pip install --upgrade luma.oled
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
# -*- coding:UTF-8 -*-
from luma.core.interface.serial import i2c, spi
from luma.core.render import canvas
from luma.oled.device import ssd1306
import time,os,socket,fcntl,struct

def getHostIp():
try:
my = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
my.connect(('8.8.8.8', 80))
# ip = my.getsockname()[0]
ipList = my.getsockname()
finally:
my.close()
return ipList

# Return % of CPU used by user as a character string
def getCPUuse():
return(str(os.popen("top -n1 | awk '/Cpu\(s\):/ {print $2}'").readline().strip()))

# Return CPU temperature as a character string
def getCPUtemperature():
res = os.popen('vcgencmd measure_temp').readline()
return(res.replace("temp=","").replace("'C\n",""))

def getRAMinfo():
p = os.popen('free')
i = 0
while 1:
i = i + 1
line = p.readline()
if i==2:
return(line.split()[1:4])


def getDiskSpace():
p = os.popen("df -h /")
i = 0
while 1:
i = i +1
line = p.readline()
if i==2:
return(line.split()[1:5])

def ramTotal():
return(round(int(getRAMinfo()[0]) / 1000,1))

def ramUsed():
return(round(int(getRAMinfo()[1]) / 1000,1))

def ramFree():
return(round(int(getRAMinfo()[3]) / 1000,1))


# 创建 IIC 设备
serial = i2c(port=1, address=0x3C)

# 如果使用 SPI,换成这个
# serial = spi(device=0, port=0)

# 创建屏幕的驱动实例
device = ssd1306(serial)

while True:
with canvas(device) as draw:
draw.rectangle(device.bounding_box, outline="white", fill="black")
draw.text((18, 5), "Hshen raspberry" , fill="white")
draw.text((2, 14), "CPU:" + getCPUuse() , fill="white")
draw.text((62, 14), "Temp:" + getCPUtemperature() , fill="white")
draw.text((2, 23), "RAM:" + str(ramUsed()) + "/" + str(ramTotal()) , fill="white")
draw.text((2, 33), "Disk:" + str(getDiskSpace()[1]) + "/" + str(getDiskSpace()[0]) , fill="white")
draw.text((2, 42), "ip:" + getHostIp()[0] , fill="white")
draw.text((2, 52),time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) , fill="white")
time.sleep(2)

🌰: 有一下三台机器 S1、S2、S3 ===> S1的公钥分别放在了S2和S3上面,当然也可以免密分别登录S2和S3,但是当你从S1登录到S2,如果再想从S2登录到S3是需要密码,因为你S2的公钥没有放在S3上面,不过我们可以让S2充当代理的角色

实现:
  • 方案1: 编辑本地 vi /etc/ssh/ssh_config 将ForwardAgent值设置为yes,表示允许客户端进行转发
  • 方案2: ssh -A root@xxx.xxx.xxx.xxx

PAC:代理自动配置(英语:Proxy auto-config,简称PAC)是一种网页浏览器技术,用于定义浏览器该如何自动选择适当的代理服务器来访问一个网址。维基百科

  • 一个PAC文件包含一个JavaScript形式的函数“FindProxyForURL(url, host)”。这个函数返回一个包含一个或多个访问规则的字符串。用户代理根据这些规则适用一个特定的代理器或者直接访问。当一个代理服务器无法响应的时候,多个访问规则提供了其他的后备访问方法。浏览器在访问其他页面以前,首先访问这个PAC文件。PAC文件中的URL可能是手工配置的,也可能是是通过网页的网络代理自动发现协议(WPAD)自动配置的。
  • 创建proxy.pac文件写入以下代码,xx.xx.xx.xx为你服务器的地址, yyyy为你Socks的端口,然后把文件放到你的服务器目录里面确保能访问到 比如:xxx.com/proxy.pac

    1
    2
    3
    function FindProxyForURL(url, host) {
    return "SOCKS xx.xx.xx.xx:yyyy";
    }

    然后再iPhone上设置 > WLAN > HTTP PROXY 选择Automatic填入刚才文件的url

SSH 免密登录,手动把自己本地的公钥copy到远程服务器上~/.ssh/authorized_keys这个文件里面,如果没有就新建一个,比较快速方法就是在Terminal执行

1
2
# root为远程登录的账户,xx.xx.xx.xx替换成你服务器ip
ssh-copy-id root@xx.xx.xx.xx

以后我们就可以ssh root@xx.xx.xx.xx 就不需要输密码了😀

在公司拉github代码还是蛮快的,但是回到家用浏览器Socks5上GitHub贼快,但是Terminal默认不走Socks5所以拉代码贼慢,解决方法:让Terminal也走Socks5

在Terminal输入以下代码

1
2
# 临时改变Terminal的代理,窗口关闭后失效
export all_proxy=socks5://proxy.hackshen.com:1080

把以下方法copy到你的~/.zshrc文件里

1
2
3
4
5
6
7
8
9
10
# Terminal proxy
function proxy_off(){
unset http_proxy
echo -e "已关闭代理"
}

function proxy_on() {
export all_proxy=socks5://proxy.hackshen.com:1080 # 配置http和https访问
echo -e "已开启代理"
}