OpenWrt 上使用 Python 操作 TAP/TUN

这两天折腾 tun,之前完全没接触驱动这么底层的东西,全靠 GlacJAY 大大的这篇文章入门了。

一句话,参照此 gist,同时将TUNSETIFF = 0x400454ca改为TUNSETIFF = -2147199798 即可。

那篇文章的代码在 Windows 和 Ubuntu 下都正常运行,但今天在路由器上运行时却报错了:

Traceback (most recent call last):
  ……
  File "/root/movpn/tun.py", line 218, in _open_tun
    fcntl.ioctl(tun, TUNSETIFF, ifr)
IOError: [Errno 81] File descriptor in bad state

因为 vtun 运行正常,所以 tun 本身应该是没问题的。又测试了一下,这个错误在 ioctl 的request不正确时出现。遂铺天盖地地寻找此值,发现不少相同遭遇,如这里还有这,但没找到解决方案。

先去解了 ioctl,得知第二个参数是由好几个部分组成的,从 if_tun.h 找到了 ioctl.h,最后卡在一点C语言也不会,琢磨半天也没弄明白 TUNSETIFF 取值多少..

无奈,只好试着自己写段代码把 TUNSETIFF 打出来了..
之前只听说过 交叉编译 这个词,现在就要动手了好鸡冻,好在 OpenWrt 的相关资料很丰富:参照 wiki 以及 这篇帖子 外加一晚上时间终于完成了。

找了一个 C Hello Word 改了一下: 继续阅读

.Tk 又乱来了,换域名

本渣博又一次换域名了 ouno.tk → sorz.org
简单说就是,之前用的 ouno.tk 因为比较短比较好看,Dot TK 觉得免费了可惜就收回去卖了..

今天发现的无法访问,域名从后台面板里消失了。可以注册,不过变成收费域名了,19.9刀/2年 还不便宜.. 不过 .tk 都是拿来玩的吧,受各种歧视,谁会花钱买呢..
有了上一次 Tk 域名消失的经历,这次我已经淡定了。 特意查了下垃圾邮件箱,这次确认真是毫无征兆地收回的..

新域名还是 orz 系列。随便试了几个,sorz 看着顺眼还挺短,就它了。没什么特别的含义。

Shadowsocks-java

Update 130905: 注意这只是一个练习,日常使用推荐 Pythonnode.js

Shadowsocks-java你懂的 软件的客户端的 java 版本。

Python, node.js, Go, C, C#, Ruby, Javascript 各种版本都有了,似乎没见到 Java 版..(Android 客户端用的是 C 版
抱着 改改然后出安卓收费版 积攒一下经验值的想法,试着用 Java 重写了一遍这玩意..

获得成就:

  • 习得 java Socket 编程基础
  • 明白 select 是何物
  • 习得 Socks5 协议基础
  • 了解归并排序
  • ……

只写了原始的 table 加密,归并排序那段是抄现成的。
后来才知道有 Arrays.sort(T[], Comparator) 无需自己写排序,但 byte[] 要转成 Byte[] (?) 我怕影响效率就没动了。

网络那段和 Python 版的一样,用了线程和 select。每个连接一个线程,转发数据用 Selector 。期间反复参考了这篇文章
本想全改 select 的但是当时还不太明白 Selector 怎么用,下次也许能写出来了。

具体用法参照 README。传送门在文章开头。

Windows 下 VirtualBox 挂 USB 问题

印象中,至少是 Win 7 以来,VirtualBox 没一次添加 USB 设备成功的。

在 @fewspider 提醒下,总算有了些进展。

手动建立vboxusers组,并将自己用户加入该组。
(计算机,右键,管理,本地用户和组 中操作)

再次运行 VirtualBox 系统便奇迹般有了反应:
添加 USB 时 Host 提示找到新硬件,虽然尝试添加 U盘、鼠标 时还是提示设备忙,但是添加本子内置的读卡器摄像头却成功了。
也许和我全 USB 3.0 有关?

但至少可以说明,和用户组是有关的,安装时不知为啥没有添加该组..
几次搜索都没有人提到 Win 的下这个问题.. 所以发出来说下..

为 Shadowsocks 客户端加入 HTTP 代理支持

shadowsocks你懂的 软件,SSH -D替代品。

SOCKS5 代理自己用着是没问题的,但普及以及携带使用的时候,HTTP 代理会更方便些(无 DNS 污染问题)…

代码在这,基于 0.9.2。
先放 pastebin 上了.. git 用不清楚就先不 fork 了..  – –
(虽然改得比较丑,但使用起来没问题啦