技术开发 频道

推荐给技术开发人员的实用命令行工具

  Sshuttle

  Sshuttle允许你通过任意一台可SSH访问的服务器来为你的流量建立安全的隧道。搭建和使用都非常简单,不需要你在服务器上安装任何软件或者修改任何本地代理设定。当你在非安全的公共WiFi或其他不受信任的网络中时,通过SSH让流量走安全隧道,这样就可避免类似Firesheep或dsniff这样的工具的侵扰。所有的网络通讯,包括DNS请求都会发送到你的SSH服务器:

  $ sshuttle –r <server> --dns 0/0

  如果你提供了—daemon参数,sshuttle会以守护进程的形式在后台运行。结合一些其他的选项,你可以使用别名形式来简单快速的启动和停止安全隧道:

  alias tunnel=’sshuttle –D –pidfile=/tmp/sshuttle.pid –r <server> --dns 0/0

  alias stoptunnel
=’[[ -f /tmp/sshuttle.pid ]] && kill `cat /tmp/sshuttle.pid`’

  你也可以使用sshuttle来解决一些基于IP的地理定位筛选的问题,如今有很多服务都在使用这种应用比如BBC的iPlayer就需要你在英国,还有Turntable,需要你在美国。要绕过这种限制,你需要访问到位于该国的某个服务器。Amazon在许多国家都有免费的E2C微实例,或者你也可以找一个便宜的vps,几乎世界上任何国家都有。

  在这个例子中,我们不需要让所有的流量都走隧道,我们只需要针对目标服务的流量就行了。

  不幸的是sshuttle只接受IP地址作为参数,不支持主机名,所以我们还得先用dig来解析出主机名。

  $ sshuttle –r <server> `dig +short <hostname>`

  Mitmproxy

  Mitmproxy是一个支持SSL的HTTP中间人代理工具,它允许你检查HTTP和HTTPS流量并支持直接改写请求。这个应用曾经在一些有关iOS应用的隐私丑闻中都出现过,包括Path的地址簿上传丑闻。它的直接改写请求的能力也被用来针对iOS平台,其应用包括在GameCenter中伪造一个虚假的高分数值。

  Mitmproxy可不只是用来查看移动应用发送了些什么内容或者是伪造几个高分数值那么简单。它同样可以为Web开发者解决很多问题。比如,之前我们需要不停点击F5键或者清除缓存才能保证看到最新的内容,现在你可以运行:

  $ mitmproxy --anticache

  这样将自动去掉缓存控制相关的header,并确保你总是获取到刷新后的内容。不幸的是,这并不会像sshuttle那样自动为你设定转发功能,所以启动mitmproxy之后你还需要修改全局或者特定于浏览器的代理设置。

  mitmproxy另一个非常给力的功能是记录并重现HTTP的交互过程。官方文档给出了一个关于无线网络登录的例子。同样的技术也能够用来作为基本的Web测试框架。比如,为了确认你的用户注册流程是否正常工作,你可以开启记录会话:

  $ mitmdump -w user-signup

  然后跑一遍用户注册流程,目前为止应该能如预期般的工作。用Ctrl+C来停止记录。在任意时刻我们都能重现刚刚记录到的交互过程,并检查200状态码:

  $ mitmdump -c user-signup | tail -n1 | grep 200 && echo "OK" || echo "FAIL"

  如果注册流程中的任意一点出了问题,我们将看到FAIL消息而不是OK。你可以创建一整套这类测试套件,并经常执行这类测试以确保当站点突然出现故障时你会得到提示。

0
相关文章