Talk is cheap

Show me the code

使用 GZip Bomb 对抗站点扫描工具

如果你翻看过公网 nginx 服务器的 access.log 的话,一定会发现很多尝试搞你的人。比如:

47.52.119.128 - - [12/Nov/2018:15:47:22 +0800] "POST /wp-admins.php HTTP/1.1" 404 153 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:59.0) Gecko/20100101 Firefox/59.0"
92.154.49.175 - - [12/Nov/2018:17:37:39 +0800] "GET /mysql/admin/index.php?lang=en HTTP/1.1" 404 555 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36"
14.141.146.139 - - [13/Nov/2018:02:25:17 +0800] "POST /qq.php HTTP/1.1" 405 157 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0"
63.146.211.234 - - [13/Nov/2018:05:43:50 +0800] "POST / HTTP/1.1" 405 157 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko"

诸如此类,懒得给这些 IP 打码了。这些类似的请求一次少说也有上百个,弄得 Nginx 的日志里面红红一片。其实一开始是懒得搭理这些东西的,毕竟对我来说也没什么损失,大不了跑点流量,反正国外辣鸡主机流量跟不要钱似的。

趁着双 11 ,剁手入了一台辣鸡主机, 2C2G 的配置看起来很是豪华。但才刚跑完 vps2arch初始化脚本 ,就发现已经有人摸到我的 IP 开始扫描奇怪的东西了。这怎么能忍?于是我决定搞点防御措施,至少要让那些只会用工具扫描的 Script Boy 们吃点苦头。

- MORE -

使用命令行工具处理图片

用手机拍摄的照片将要在互联网上公开转播的时候,我通常会担心两点。第一,图片的 EXIF 信息会不会泄漏;第二,尺寸太大,传输速度不理想。虽然大部分服务商都会压缩图片,但如果不是自行处理一下的话还是会感觉怪怪的。但如果使用 Krita/GIMP 之类的工具,有些杀鸡焉用牛刀的感觉。所以简简单单的命令行工具就足够了。

删除图片的 EXIF 信息

这里用到的第一个命令行工具是 exiv2 。删除 EXIF ,只需要一条命令就够了:

exiv2 rm *.jpg

然后图片的 EXIF 信息就没了。

这个工具也提供 prpr 的功能,不过是用来打印 pr(int) EXIF,不是你们想象的那种:

exiv2 pr *.jpg

输出的格式像这样

- MORE -

制作极限压缩的 Material Icons 图标字体

UPDATE: 写了一个傻傻的 Python 脚本 来自动处理字体,只要将所需要的图标名称每行一个写入 icon-names.txt ,就能一键生成压缩好的字体文件。(2018/04/26)

以下是原文。


这几天挖了 新坑 MelodyPlayer ,其中有用到 Google 的 Material Icons 。虽然它的 woff2 格式只有 42KB ,但我只用了其中的 10 个图标,加载整个字体文件显得很不划算。虽然 Material Icons 提供了制作 Sprite 的方案,但只有 SVG 或 CSS Sprite ,我的用法是 <button> 里写图标的名字,不能兼容。

我不愿意改代码,于是想寻找一种提取字体中特定字符的方法。

经过一番搜索,找到了 fonttools 这个强大的工具,可以精确控制字体文件的每一个 Glyph ,最大限度压缩字体。

- MORE -

一次意外的 rm -rf

本事件发生于 2018 年 1 月 9 日 晚 22:27:41

我最喜欢的 Interactive Shell 是 Fish 。Fish 有个特性是自动补全命令以及目录。当你在 Fish 中输入 ~ 这个字符,按下 Tab 键,就会列出一系列系统中已存在用户的 home 目录来供你选择。

Home 目录补全

- MORE -

XPS 13 9350 更换 Intel 8260 AC 无线网卡

Dell XPS 开发者版与普通版最大的区别大概就是无线网卡了。开发者版是 Linux 友好的 Intel 网卡,而其他的版本一般是 Dell 自己的网卡,在我看来就是 Broadcom 网卡的马甲。据说 Broadcom 的网卡对黑苹果很友好,然而我又不用 ... 但最近在更新 linux-lts 内核的时候,却出现了很大的问题。

在上个星期更新内核到 linux-lts-4.9.62-1 时,出现了网卡不可用的情况。给出的报错信息为

# journalctl
11月 20 14:43:34 quad kernel: brcmfmac: brcmf_p2p_create_p2pdev: set p2p_disc error
11月 20 14:43:34 quad kernel: brcmfmac: brcmf_cfg80211_add_iface: add iface p2p-dev-wlp58s0 type 10 failed: err=-16

# dmesg
[    4.061743] usbcore: registered new interface driver brcmfmac
[    4.061803] brcmfmac 0000:3a:00.0: enabling device (0000 -> 0002)
[    4.184308] brcmfmac 0000:3a:00.0: Direct firmware load for brcm/brcmfmac4350-pcie.txt failed with error -2
[    4.645165] brcmfmac: brcmf_c_preinit_dcmds: Firmware version = wl0: Oct 22 2015 06:16:26 version 7.35.180.119 (r594535) FWID 01-e791c176
[    4.660415] brcmfmac: brcmf_cfg80211_reg_notifier: not a ISO3166 code (0x30 0x30)
[    4.681113] brcmfmac 0000:3a:00.0 wlp58s0: renamed from wlan0
[    6.054543] brcmfmac: brcmf_p2p_create_p2pdev: set p2p_disc error
[    6.054549] brcmfmac: brcmf_cfg80211_add_iface: add iface p2p-dev-wlp58s0 type 10 failed: err=-16

Google 了好半天,没有发现什么有用的信息,于是滚回 mainline 内核看看。结果一切正常 ...

但我就是要用 LTS 内核,这个 Broadcom 网卡已经让我不爽很久了!于是某宝买了个网卡,就有了下面的故事。

拆机

根据 这个教程 ,拆掉后盖的 8 个螺丝,掀开后盖,就可以直接换网卡了。不过后盖的螺丝是 * 型的,最好提前准备一下。

- MORE -

微信开发者工具 在 Linux 中的使用与吐槽

听说微信开发者工具更新了,啊不,不是听说,其实是在某挨踢之家看到的 一篇文章 ,出于好奇,就进去看了一下。发现下载页面只提供了 Win32/64 以及 macOS 的下载。真抠门啊,不给个 Linux 版的。我猜这个“开发者工具”是用 Electron 驱动的,于是下载了一个 macOS 版的准备看看。

下载下来是个 dmg ,可以用 7z x file.dmg 直接解包。这是解包之后的目录结构:

微信web开发者工具
├── Applications
├── .background
│   └── dmg-background.tiff
├── .DS_Store
├── [HFS+ Private Data]
├── .HFS+ Private Directory Data\015
├── .VolumeIcon.icns
└── wechatwebdevtools.app
    └── Contents
        ├── _CodeSignature
        ├── Info.plist
        ├── MacOS
        ├── PkgInfo
        ├── Resources
        └── Versions

打开 wechatwebdevtools.app/Contents/Resources ,里面出现了 app.nw 这个文件夹,原来用的是 nw.js 。继续进入,果然有 node_modules 以及 package.json 。然后进入 node_modules 看一下,发现了 reactreact-domreact-redux ........ 以及一大堆的 babel 插件。从 stage-0stage-3babel-registerbabel-minify 一应俱全。在打包的时候就不能把这些 devDeps 给删掉吗???

暂停一下,继续来看看能不能运行。

AUR 里面装一个 nwjs-bin 就行了。然后 cd 到 app.nw 运行

- MORE -

Arch Linux & KDE Plasma 配置笔记

换了新电脑之后,便入了 Arch Linux 的深坑。一开始是三天两头换桌面环境,还尝试使用 Unity for Arch ,最后还是停在了 KDE Plasma 。因为听说(真的是道听途说) f2fs 对固态硬盘很友好,便尝试在根文件系统上使用 f2fs 。但没有比较,也感觉不出来系统有多快,反而遇到很多坑 ... 装系统和日常使用的时候都有。比如系统启动的时候突然闪出一个 [FAILED] ,关机的时候半天关不掉(这里似乎忘了提示信息是什么了,反正是一个 1min 30s 的正计时,但时间到了以后又会顺延 1min 30s ,有时能到二十几分钟 ... ),Chrome 三天两头提示个人配置文件已损坏,但重启电脑又接着恢复 ... 等一系列坑爹的问题。一忍再忍,终于忍无可忍,但这时候就要期末考试了,所以只能继续忍下去。现在期末考试终于结束了,可以愉快的重装系统了!

首先是备份,直接把 /home 打成 tar 包复制到固态最后面一块刚划出来的分区里面备用。然后进入 LiveCD ,把 f2fs 分区干掉,换成 ext4 。这里又想吐槽一次了,f2fs 居然不支持分区移动和收缩,要拓展分区只能用 resize.f2fsparted 也是拿他没什么办法。

arch-chroot 分割线

先安装基本的软件包,当然少不了 fish shell 了!

pacman -S sudo fish git vim zsh nodejs npm shadowsocks-libev proxychains

在 Arch Wiki 的 KDE 安装环节,只提到了安装 kde-applications 软件包组或 kde-applications-meta 包。但这样会搞出很多没用的包,比如各种游戏,莫名奇妙的化学工具,“KDE 元素周期表”等等 ... 需要酌情做一些精简。

- MORE -

Chrome 终于修复了高 DPI 下 IME 漂移的 bug

今天,北京时间 2017 年 4 月 20 日,Chrome for Linux 浏览器更新了 58.0.3029.81 版本。此次更新修复了一个陈年旧 bug :在 HiDPI 下输入法定位漂移的问题。相信高 DPI Linux 用户都会有亲身体会,而且基于 Chromium 的 Electron 应用也会有这个问题。现在这个 bug 终于被修复了,喜大普奔!接下来就坐等 Electron 同步最新的 Chromium 源码,皆大欢喜了!!!

喜大普奔

- MORE -

在 KDE 中使用 KWallet 自动解锁 SSH 密钥

一开始用 Ubuntu 的时候,创建过一个 SSH 密钥,然后 Unity 很贴心的帮忙勾选上了“每次登录时自动解锁此密钥”,惯得我差点把密码给忘了。前一段时间把所有 Git 仓库的远程 URL 都换成了 SSH,感觉好像快一点,但每次都输入密码很是烦人。虽然 WebStorm 可以在同步更改时选择保存密码,不过关掉以后还得输入。那就随便折腾一下这个 KWallet 吧。

大部分的内容都参考自 Arch Wiki :

  1. KDE Wallet
  2. SSH Keys
  3. systemd/user

1 安装必要的软件包

首先要安装的肯定是openssh。然后还要一个输密码的 GUI ,即ksshaskpass

sudo pacman -S openssh ksshaskpass

2 设置 ssh-agent 服务

新建文件 ~/.config/systemd/user/ssh-agent.service

[Unit]
Description=SSH key agent

[Service]
Type=forking
Environment=SSH_AUTH_SOCK=%t/ssh-agent.socket
ExecStart=/usr/bin/ssh-agent -a $SSH_AUTH_SOCK

[Install]
WantedBy=default.target

然后启用这个服务

- MORE -

我的第一台 Arch Linux 设备居然是树莓派

上学期实验室买了几个树莓派,到手之后装上 Ubuntu Mate 15.10 试玩了一番,给人的感觉并不是特别的酷。。。后来因为期末考试等各种原因,就只能一直待在橱子里面吃灰。但在这学期的开始,我们决定以物联网为主要发展方向,感觉树莓派无论是用作传感器数据采集还是数据汇总的小型服务器都是不错的选择,当然要利用起来了。

至于为何选择 Arch Linux ,只能说,额,没用过,比较新鲜吧。寨板一直在用 Ubuntu ,VPS 上跑的也是,用久了总归是有些腻味了。那些大法,邪教什么的,我可都没听说过

1 硬件准备

当然,要有一台树莓派。。。我这里用的具体型号是 Raspberry Pi 3 Model B

Micro SD 卡一张,如果只用纯命令行界面的话 4GB 应该足够了,如果要安装图形界面的话需要大一些。然而 Arch Linux ARM 不自带图形界面。我这里用的是 32GB Class10 。

然后要有读卡器,网线(刚装好的系统只能用 ssh 连接),还有需要注意的一点是一定要买一个可以输出 5V2.5A 的 USB 适配器。否则用 ssh 连接的时候会出现莫名奇妙的 Connection Refused

- MORE -