分类目录归档:折腾

简单的 SSTP 服务器

SSTP (Secure Socket Tunneling Protocol) 是微软开发的一种 VPN 协议,用 SSL/TLS 加密 PPP 流量。参见 使用 SSTP 协议的 VPN 有什么优势和缺陷?

本来没怎么关注这个东西,支持少非主流,IP over TCP,也是因为一些奇怪的事突然有了这方面需求了,才开始了解它。

SoftEther

目前在 Linux,服务器似乎只有 SoftEther 这个实现。这软件也是挺拼的,把各种流行的非主流的 VPN 协议都给实现了一遍,跨平台,GPL。还提供傻瓜化的 GUI 管理,中日英三语界面,简直就是部署 VPN 的大杀器。只是一来太重,二来对 RADIUS 支持不全,不太符合需求。

DIY

因为内部走的是 PPP,如果只是调用 pppd 并转发数据,由 pppd 负责用户认证等麻烦事,自己实现一个目测也不是太复杂。加上微软的官方文档甚详,近来又一直想学一下 Twisted 但又不知如何入手,决定来写一个试试。

托 Twisted 的简单易用,挺顺利地初步完成了这个 SSTP 服务器。

代码放在 GitHub 和 PyPI 上了,sorz/sstp-server
PyPI

安装使用

供参考,详见sstpd --help继续阅读

OpenWrt VPN 按域名路由

简述

这是一种基于域名的 VPN 智能翻越方案。不同于 chnroutes 这类通过维护一个 IP 地址列表来区分国内外网站的方案,基于域名的方式不受 IP 地址变动的影响。仅需维护一个相对很少有变化的域名列表即可。

dnsmasq 在 2.66 版之后加入了对 ipset 的支持,可将指定域名的 IP 解析后自动加入某一 ipset 中。 再配置路由规制,使该 ipset 中的 IP 走 VPN 即可。

感谢 @wzyboy 提供了此方案的思路。

大致流程

  • 配置 VPN
  • 配置 dnsmasq,指定域名
  • 增加一个路由表,默认网关为 VPN
  • 使用 iptables 匹配 ipset 并打上 mark
  • 使用 ip rule 将打上 mark 的包送入该路由表

所需软件

  • iproute2
  • dnsmasq (>= 2.66, has ipset)
  • iptables (with ipset and mark modules)

继续阅读

半公开 Shadowsocks 架设注意事项

作为一个轻量级代理工具,安装配置很方便,基本上照着 README 做就行了。
这里说下在 Linux VPS 上架设半公开 Shdowsocks 服务可能需要用到的两项额外配置

同样由于为了保持轻量,Shadowsocks(这类)工具并不提供访问控制(ACL)和流量控制(TC)功能。 这在某些情景下可能产生安全隐患:公开或半公开帐号,可能有不信任的人使用;服务器上同时运行了其他服务。

禁止访问本机与内网

在 Linux 中,使用 TCP/UDP 在进程间通讯十分常见,比如 MySQL、PHP-FPM、Memcached… 它们在 127.0.0.1 上开一个端口,让其他程序连接。

localhost 只有本地应用才可访问,所以一般认为是安全的。但挂上 Shadowsocks 后,在客户端发起的请求,在系统看来,就是本地应用发出的。

感谢 @lilydjwg 的提醒,可以这么做:

Step 1  以outwall用户身份运行 Shadowsocks 继续阅读

乱发数据包

这是去年写的一个用于干扰教学的工具。

Computer Networks 这门课,需要用到 Wireshark 这个抓包软件查看网络流量。
写了这玩意,通过广播一些特制的数据,可以在其他人的机子上刷出点有趣(?)的东西:在 Wireshark 上刷奇怪的东西

如图,一眼就能看出不正常.. 其实就是乱发 HTTP Response,并把原来显示状态码(200、404 …)的部分,改成了其他文字…

由于需要发,用了 WinPcap,它提供了一些 API 能够比较方便地跳过系统的协议栈,让网卡发送完全自定义的数据。这里使用了它的一个 Python 绑定 winpcapy

最后需要发送的是以太网帧,也就是说,要自己从 HTTP、TCP、IP 一路构建下来。为了简化工作使用了 dpkt ,里面提供了丰富的协议支持,能很方便地构建数据包。

一点小细节:Wireshark 会分析 TCP 协议,并把不正常的包用红色标出。为了避免这样,每个包的目的端口都是随机选取的,让 Wireshark 认为每个包都属于不同的 TCP 会话。当然换成随机的 IP 也没问题。

代码贴 Gist 上了 Gist 9721330

玩法:

  1. 下载安装 Python 2.7 和 WinPcap
  2. 下载打包的好的工具;
  3. 运行net_test.py得到网卡列表和对应的地址(e.g rpcap://\Device\NPF_{x-x-x-x-x});
  4. 运行net_test.py rpcap://\Device\NPF_{x-x-x-x-x}发送。
    完整用法是net_test.py <interface> [repeat_times [message]],可选重复次数与消息内容(默认是 5 次、发送随机表情)。

注意需要管理员权限,系统如有开 IP Forwarding 功能需关闭

代码不复杂,想玩更多花样可以自己改..
注意这样不按协议标准发数据的事.. 还是少做得好.. 玩玩就好,切勿滥用..

重构 ASS to SRT 字幕转换工具

重写了一遍两年前初学蛇语时写的字幕转换工具(ASS 字幕批量转 SRT)。

当时因常用某三星电视看动画,有这个需求。此外还想学下 Python,于是挖了这个坑..
自从最近把 VPS 邮件转发至 Gmail 后,不断被此坑在线版的错误报告骚扰,一翻代码,太羞耻了简直丑陋,决定换掉…

原有的功能都还在:批量、繁简转换、删特效字幕、仅保留首行、重排序、识别/指定编码。字幕重排序由可选改为强制启用。默认输出编码由 UTF-16 改为与源文件相同。兼容 Python 2.7 / 3.x。
不自带chardetlangconv这两个可选依赖了。后者为繁简转换所需,不在 PyPI 上,可在此处下载

非发烧用户请直接戳 在线版 就好了。
虽然网页还是旧的,内部已经换上了全新的 asstosrt。

Python 用户请直接:

pip install chardet
pip install asstosrt
asstosrt --help