部署 adminMongo 的 Docker 镜像

之前在软工的平台上部署了一个 MongoDB ,但是自然是仅内网访问,想要浏览内容只能通过网页上的 Console 进去看,体验特别不好。所以想着能不能找一个在线的 MongoDB 浏览器。由于软工平台只能部署 Docker 镜像,所以我找到了mongo-express和adicom/admin-mongo。但软工平台现在还没实现环境变量的配置,所以我选了后者。 首先本地创建一个 app.json ,让它监听 0.0.0.0:80 ,通过 deployer 传到平台上的配置,然后再把配置 mount 到 /app/config 路径上。现在就可以成功地在网页上浏览 MongoDB 了。

Read More

OpenWRT 上配置 Gandi DDNS

一直想给自己的 OpenWRT 路由器添加 DDNS 功能,但 Gandi 不在官方的 ddns-scripts 列表中,自己在网上找了一些脚本,发现是 Python 写的,尝试把 Python 安装到路由器上又发现空间不够,虽然可以安装到 USB 上,但总归是麻烦。 最后找到了官方的一个脚本,非常适合我的需求。简单修改一下,然后安装一下支持 HTTPS 的 cURL : $ opkg update $ opkg install ca-bundle $ opkg install curl 然后把脚本添加到 crontab 即可。

Read More

ETC 比赛无线网络搭建小记

正好上着李贺武老师的《无线移动网络技术》课,然后今天又给 ETC 比赛搭建无线网络,于是周二的时候找老师咨询了一下意见。我们大概给老师讲了一下场地的样子和尺寸(当时估计的大了),然后老师给我们提供了一个可以供参考的部署方案,包括几个 AP 分别放在哪,这些 AP 的 2.4GHz 都用哪个 channel ,然后都用多少功率。并且很友善地在周五的时候让助教来场地帮我们 survey 一下无线网络的状况。我们用 Fluke Networks 的 AirCheck Wi-Fi Tester 看了一下场地的各个频道的 AP 数量和信号强度,发现虽然 AP 挺多的,但是它们的信号都比我们的小不少,而且我们也都开到了 50mW ,所以干扰不大。 然后昨天下午一点半钟来到场地,用板车把设备都运到计算机开放实验室,然后开始部署无线网络。我们提前来踩过几次点,这边的网络是没有 DHCP 服务器的,通过一个指定的网关出去。我们发现可以利用已有的这些交换机从地下连到各个电脑上的网线,来连接我们的 AP 和交换机,这样我们就免去了走线的麻烦。于是我们先定下放 AP 的位置,然后用寻线器找到网线插到了交换机的哪一个端口上,标记好后换成连接到我们自己的交换机的网线上,从而可以通过 PoE 把我们的 AP 给启动起来。然后用我自己的路由器,把 LAN 口插到交换机上,给 AP 分发 DHCP 地址,然后把下发的默认网关配置为真实的网关(DHCP Option 3) ,没做但是也可以顺带做的是把 WLC 的地址分发下去 (DHCP Option 43 Type 241)。 当然,这个过程也遇到了一点小坑,就是交换机还保留了之前的配置,所以这次把新的几个端口划到了一个 VLAN 下,命令自然是记不住的要现查。然后起来以后还挺稳定的,也没出现什么问题,网络带宽也足够用,离千兆还有蛮多距离,一天也才跑了接近俩 TB 的流量。

Read More

Unicode En Dash 小坑

今天有同学问到我这个问题: $ gcc -o ph ph.c –lpthread 为啥不工作。我怎么看都觉得没啥问题,一开始以为是找不到 pthread ,但马上又排除了。想了下会不会是有隐藏的字符,于是让同学 pbpaste | xxd 一下,果然发现这里的 – 是 \xe2\x80\x93 ,查了下是 Unicode 里的 En Dash 。由于这是从 PDF 里直接拷贝出来的,所以凉了。改成正常的短横杠即可。

Read More

软工平台踩坑记

老师要求我们搞 CI/CD ,CI 自然是很快就搞好了,不过 CD 还得配一下。今天研究了一下它的 Deployer 架构,发现了若干易用性问题: 缺乏文档 只有样例配置没有讲解 已有的文档 语焉不详 官方对此回复:功能太多,还没忙过来写文档 于是只好经常戳助教然后尝试理解这个东西。。然后遇到了很多的 BUG : 容器没有重启功能。。。 容器死了还是活着看一个图的颜色。。。毫无说明 容器虽然有 Console ,但是输入过长后直接回到行首没有换行。。。 容器对外的域名里有下划线。。。 Django 上来就一句 Invalid HTTP_HOST header: 'xxxx_xxx.app.secoder.net'. The domain name provided is not valid according to RFC 1034/1035. Express 直接就 Invalid Host header 放弃治疗。。。 助教对上一条的回复是,等我忙完 DDL 有空再做吧。。。也就是说现在要做只能自己再开一个 Nginx 容器然后自己在 proxy_set_header 上做手脚。。。

Read More

在荔枝糖(Lichee Tang)上初次体验 FPGA

今天从张宇翔学长那拿到了 荔枝糖(Lichee Tang) 的 FPGA 板子,于是立即开始把前段时间学到的Verilog应用上来。不过想到现在我手上没有多少外设,然后又必须远程到 Windows 电脑上去操作,于是先实现了一下 UART 通信。 在网上找到了 ben-marshall/uart 一个简易的实现,很快做到了一直在串口上打印 A 字符。接着我开始尝试实现一个简单的串口回显。一开始,我直接把 UART 读到的数据直接输出,果然可以了,但是一旦传输速率跟不上了,就会丢失数据。于是我添加了 FIFO IP 核,然后把读入的数据存入 FIFO ,又从 FIFO 中读取数据写入到 UART 中去。不过发现了一个小 BUG:每次打印的是倒数第二次输入的字符,即丢失了第一个字符。在张宇翔学长的帮助下找到了问题:当 FIFO 的读使能信号为高时,其数据在下一个时钟周期才来,于是解决方案就是等到数据来的时候再向 UART 中写数据: always @ (posedge clk_in) begin uart_tx_en <= uart_fifo_re; end 这样就解决了这个问题。完整代码在 jiegec/learn_licheetang 中。

Read More

使用 veth 实现 IPv6-only 的 Brouter 功能

最近从 @shankerwangmiao 学到了一个方法:通过 veth 把两个 bridge 的 IPv6 桥接起来。方法如下: $ ip link add veth-v6-in type veth peer name veth-v6-out $ brctl addif br-in veth-v6-in $ brctl addif br-out veth-v6-out $ ebtables -t filter -A FORWARD -p ! IPv6 -o veth-v6-in -j DROP $ ebtables -t filter -A FORWARD -p ! IPv6 -o veth-v6-out -j DROP 这样就可以看到 veth 上仅有 IPv6 的流量了。

Read More

在 Android 上打开 LTE 的 IPv6

听闻北京移动给 LTE 配置了 SLAAC ,但现在需要手动打开,方法如下: Settings -> Network & Internet -> Mobile Network -> Advanced -> Access Point Names -> 中国移动 GPRS (China Mobile) -> 把 APN procotol 和 APN roaming protocol 两项都改成 IPv4/IPv6 然后在 test-ipv6.com 上可以看到确实分配了 IPv6 地址,不过目前评分只有 1⁄10 。也就是说可用性还不佳。 而在 iOS 上,通过 HE 的 Network Tools 能看到,确实拿到了 IPv6 的地址,但是出不去,怀疑是运营商没有下发相关配置,所以还不能使用,只能继续等。 2018-11-06 更新:现在 iOS 用户也有 LTE 的 v6 了。评分是 9⁄10 。目前可用性已经可以了,就是国内互联还不大好。

Read More

THUCTF 2018 和 Teaser Dragon CTF 2018 小记

终于可以公开 writeup 了,大家也可以去看 twd2 写的 writeup 。 这次是我第一次打 CTF ,发现题目还挺有意思的,虽然也有一些题目做不出来,有拿钱还是美滋滋。 这次也认识了好些会打 CTF 的人吧,如 0x00, user1, igoodvegetable 等队伍的同学。一开始被蛤力橙叫来打比赛,我觉得心里挺没底的,然后花了很多时间做题目,一点一点还是做出了不少题目来。最精彩的还是结束以后,当知晓没做出来的题目的做法时候,会不自觉感叹题目的巧妙。也学到了一些梗: #define 1000000007 twd2 接着就参与了一下 Teaser Dragon CTF 2018 ,是个在线赛,许多人一起做题,只有 24 小时。看了下题目,除了签到题,其它题都比 THUCTF 2018 难多了,我只能围观他们做题。最后看到别人写的 writeup ,真是太巧妙了,一环接一环,真的想不到。不过也有很麻烦的题目,特别是有的逆向的题目,太考验人的耐心了。 接下来就等待官方的 writeup 和别人的 writeup ,学习一下别人的做法吧。

Read More

绕过 GPGMail 的激活检测

前段时间 GPGMail 宣布不再免费,在三十天的试用期后就不给用了。唉,可能是官方实在没钱维护了,也可能是官方想赚钱了。不过,既然 GPGMail 采用的是自由的许可证,意味着我们可以自己对代码进行更改。和许可证验证相关的代码如下: - (BOOL)hasActiveContract { NSDictionary *contractInformation = [self contractInformation]; return [contractInformation[@"Active"] boolValue]; } 我们只要改成 return TRUE ,在自己的电脑上手动编译、并复制到 /Library/Application Support/GPGTools/GPGMail 下即可。 另:还有一个直接对二进制打 patch 的方法(仍然符合许可证),利用了最近打 CTF 学到的一些知识。找到以上这个函数,然后把返回值修改成非零即可。这里就不提供方法了。最后的更改: $ radiff2 -D --- 0x0000282f 410fbec7 - movsx eax, r15b +++ 0x0000282f 4c89e090 + mov rax, r12 + nop 当然了,还需要额外 codesign --remove-signature 一下。 谨慎对非自由软件采用这个方法。可能有法律风险。

Read More