分类目录归档:网络

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。传送门在文章开头。

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

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

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

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

WR703n OpenWrt 作无线交换机

不知道标题描述是否准确… 就是普通无线路由器,只插入一根网线到 LAN 口的效果..
因为 TL-WR703n 只有一个RJ45口,所以可能需要改些配置.. 两个月前做过一次,现在我几乎忘了要怎么配置了,赶紧记下来..

修改 /etc/config/network ,注释掉原 wan 和 lan 设置。然后添加:

config interface lan
    option type   'bridge'
    option ifname 'eth0'
    option proto  'dhcp'

嗯..这样就行了.. 执行 /etc/init.d/network restart 生效。
第一行 lan 和 /etc/config/wireless 里的 network 对应就好。
最后一行 proto 只是方便连接路由器后台而已,按实际环境改,随便设也不影响使用就是了。

顺带一提,搞坏了连不上路由器时,可以进安全模式..
连上网线,设置IP 192.168.1.2。路由开机,等待几秒钟,待 LED 开始闪烁时,轻捅菊花。如果时机正确,LED 将狂闪不止..
此时 telnet 192.168.1.1 连接,然后 mount_root 一下,就可以修改设置了。

(如果开机马上捅菊,可能可进 failure safe 刷机)

WR703n OpenWrt 按网络流量闪烁LED

#UPDAT130215: 感谢 @dword1511 提醒,闪灯是自带功能直接设置即可:

echo phy0tx > /sys/class/leds/tp-link\:blue\:system/trigger

另外,除了 phy0tx,trigger 还有几个可选值:
[none] default-on timer phy0rx phy0tx phy0assoc phy0radio phy0tpt netdev usbdev

当然本文脚本还是有一定价值的:比如可以一眼区分出 100KiB/s 与 1MiB/s
———-

前几天TB上搞了一个火柴盒形的路由器,TP-Link WR703n
单RJ45口,USB2.0,改外置天线改 64M 内存,改 8M Flash,刷了 OpenWrt 便于折腾。

盒子上只有一颗蓝色 LED,开机后常亮,写了个脚本让它随网络流量闪烁:
以 1Hz 频率闪烁,根据流量调节占空比。无流量时常灭,满带宽时常亮。

下载脚本前,需要安装几个东西:

opkg update
opkg install lmbench-msleep bc

lmbench-msleep用来做毫秒级延时,bc用来计算小数。不是很大,各种依赖加起来几百K吧好像..)

脚本如下,修改好设置保存任意地方,加入rc.local开机自启动就好~ 继续阅读

在 DD-WRT 上配置 HE.net DDNS

以前是用棒子的 DNSEver,不过有天抽风,后来便转到了 HE.net
才发现 DNSEver 的操作实在太繁琐了。HE 简洁美,很方便。

之前是用 Python 搞定 DDNS(动态DNS)的,昨天刷了 DD-WRT(路由器固件),就用它来代劳好了。
DD-WRT 没有预置 HE.net 的 DDNS 配置,所以要手动配置。在这记录下配置。

先在HE.net添加一条A记录,勾选“Enable entry for dynamic dns”启用 DDNS。
点击该条记录后的箭头图标“Generate a DDNS key”,设置个密码。

登录 DD-WRT 的 WEB 管理界面,
设置 -> 动态 DNS(DDNS),配置如下:

DDNS 服务:  自定义
DYNDNS 服务器:  dyn.dns.he.net
用户名:  [你的域名]
密码:  [你的密码]
主机名:  [你的域名]
URL:  /nic/update?hostname=[你的域名]&myip=

其他保留默认,“保存设置”,好了。

保存后显示:

DDNS 状态
Mon Oct 3 17:46:25 2011: INADYN: Started ‘INADYN Advanced version 1.96-ADV’ – dynamic DNS updater.
Mon Oct 3 17:46:25 2011: I:INADYN: IP address for alias ‘xxxxx’ needs update to ‘x.x.x.x’
Mon Oct 3 17:46:26 2011: I:INADYN: Alias ‘xxxxx’ to IP ‘x.x.x.x’ updated successfully.

说明一切正常。

另,我用的是 DD-WRT v24-sp2 (11/21/10) std ,其他版本可能会有些许不同。
“密码”均指为每个动态域名单独设置的“Key”,不是帐号的密码。