sproxy开发体验

曾经为了让所有服务不允许随便访问公网,要访问公网则必须走代理,于是就需要一个非常NB的代理,能应对各种复杂的需求,于是自己写了一个sproxy(Supper Proxy),支持http 隧道代理、https隧道代理、sni代理。

现在,为了一些特殊的需要,需要在代理之后再转发到一个socket5代理,这样就可以与所有的socket5代理(比如: shadowsocks)实现对接,查了一下资料,其实,修改非常简单,我可以只修改两行代码就能搞定,借助golang.org/x/net/proxy 中的socket5代理,至于如何配置是否走代理,简单通过设置环境变量来实现了,如:

尽管只有两行代码,还是学到了不少东西:

  1. 想让mac上的IDE调试那个需要listen 443的程序,默认IDE不是root启动的,没有权限listen 1024以下的端口,于是通过查资料发现,可以通过端口重定向实现,让需要调试的程序listen 1443, 通过 (http://www.cnblogs.com/fullstack-yang/p/6223960.html ) 提到的方法将443的数据包重定向到 1443, 相关参考: http://www.cnblogs.com/fullstack-yang/p/6224050.html
  2. socks5不仅可以支持ip地址,还支持域名,可以在socks5之前解析域名,也可以在socks5之后解析域名;原本程序是在socks5之前解析域名的,程序偶尔会调试不通,因为socks5之前通过 114.114.114.114 解析到的 www.google.com 的ip地址是被篡改过的,有时候是Twitter的,有时候是facebook的,还有不知道是谁家的,这种情况就需要把解析域名的事情放到socks5之后做了
  3. 关于域名被篡改的情况,还可以通过dnscrypt-proxy 来解决,只是,这个需要部署dnscrypt-server,不过也有很多公开的dnscrypt-server,稍微麻烦一些,没尝试
  4. 或许可以有一种dns-proxy,可以把dns请求转发到socket5,也是挺好的,注意: golang.org/x/net/proxy 中的socks5尚不支持udp  (https://github.com/better0332/myproxy/blob/master/proxy/socks5.go) 这里有人实现过,不过star好少
  5. 也可以自己实现一个dns-server
  6. 单步调试golang时,提示找不到lldb-server, 解决办法:

powershell 之hashtable

hashtable的构造:

注意:

  1. 使用 花括号, 数组使用圆括号
  2. 使用 等于号 (=), 而非 ( =>
  3. key不需要引号
  4. 元素分隔符为分号, 而非 逗号,数组使用逗号
  5. 最后一个元素后面的分号可有可无
  6. 多个空的分号等于没有
  7. 使用Count方法计算数量, 数组使用Length ; 方法后面的圆括号可以省略

遍历:

使用cmdlet版的foreach遍历:

注意:

  1. 必须 使用GetEnumerator() 方法后才能foreach,且括号不能省略

遍历出key信息:

注意:

  1. 遍历的其实是keys