原文来自http://coding.smashingmagazine.com/2012/10/29/powerful-command-line-tools-developers/,由google和本人翻译,水平有限,请谅解。
作为Web开发人员的生活是很难的,当事情开始出错。这个问题可能是在任何数量的地方。你发送的请求是否有问题,是问题的响应,在您所使用的第三方库的要求是有问题,是一个外部的API失败?
良好的工具是非常宝贵的找出问题所在,还可以帮助防止问题的发生摆在首位,或者只是帮助你成为更有效的一般。命令行工具特别有用,因为它们本身以及自动化和脚本,在那里他们可以在各种不同的方式进行组合和重用。在这里,我们将介绍6个特别强大和灵活的工具,可以帮助使您的生活更轻松一点。
Curl
Curl是一个网络传输工具,这是非常类似wget的,主要的区别在于,默认情况下,Wget的保存到一个文件,和curl的命令行输出。这使得它可以很简单,看一个网站的内容。这里举个例子,我们可以得到我们当前的IP从ifconfig.me网站:
curl ifconfig.me
93.96.141.93
Curl的-i(显示标题)和-I(只显示头)选项使其成为一个伟大的工具,调试HTTP响应,并找出到底什么是服务器发送到你的:
curl -I news.ycombinator.comHTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Cache-Control: private
Connection: close
-L选项是非常方便的,curl自动跟踪重定向。curl支持HTTP基本身份验证,cookies,手动设定标题等。
ngrep
对于严重的网络数据包分析Wireshark的,数以千计的设置,过滤器和配置选项。还有一个命令行版本,tshark的。对于简单的任务,我发现Wireshark是多余的,所以,除非我需要的东西更强大的,ngrep的是我的首选工具。它允许你grep网络数据包的文件。
对于Web流量,你几乎总是要在-W byline选项,保留换行符。并且-q是一个非常有用的参数,它可以抑制一些额外的不匹配的数据包。这里有一个例子可以捕获所有的数据包,其中包含GET或POST:
ngrep -q-W byline “(GET|POST) .*”
你也可以传递额外的数据包过滤器选项,如符合条件的数据包限制到特定主机,IP或端口。在这里,我们筛选所有流量来自谷歌,使用端口80和“search”。
ngrep -q -W byline “search” host www.google.com and port 80
netcat
netcat或nc被称为网络上的瑞士军刀。这是一个非常简单但也非常强大和灵活的应用程序,允许你创建任意的网络连接。在这里,我们看到它被用作一个端口扫描器:
nc -z example.com 20-100
Connection to example.com 22 port [tcp/ssh] succeeded!
Connection to example.com 80 port [tcp/http] succeeded!
除了 建立任意的连接,netcat的还可以侦听传入的连接。在这里,我们使用nc的这一特点,结合tar命令,非常迅速地和有效地在服务器之间复制文件。
在服务器上,运行以下命令:
nc -l 9090 |tar -xzf -
在客户端:
tar -czf dir/|nc service_ip 9090
我们可以使用netcat建立在网络上的任何应用程序。在这里,我们建立了一个8080端口的shell:
mkfifo backpipenc -l 8080 0 <backpipe | /bin/bash> backpipe
现在,我们可以从任何客户端访问服务器:
nc example.com 8080uname-a
Linux li228-162 2.6.39.1-linode34 ##1 SMP Tue Jun 21 10:29:24 EDT 2011 i686 GNU/Linux
虽然最后的两个例子是有点做作的(在现实中,你会更容易使用的工具,如rsync复制文件和SSH远程访问服务器),也显示在所有的netcat的力量和灵活性,并暗示不同的事情,你可以通过与其他应用程序相结合的netcat的。
sshuttle
sshuttle让您可以安全地通过SSH访问服务器,你必须隧道的交通。这是非常容易设置和使用,而不是要求您在服务器上安装任何软件或更改任何地方的代理服务器设置。
通过SSH隧道的流量,您保护自己免受工具,如Firesheep和dsniff的,当你在不安全的公共Wi-Fi或其他不受信任的网络。所有的网络通信,包括DNS请求,可以通过你的SSH服务器发送:
sshuttle -r <服务器> - 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来解决现在所使用的许多服务,如BBC的iPlayer,这就需要你在英国,和转台,这就需要你在美国的过滤器,基于IP的地理位置。要做到这一点,你需要访问的服务器在目标国。亚马逊的EC2微的情况下,在许多国家,有一个免费的层,或者你可以找到一个廉价的虚拟专用服务器(VPS),几乎在世界上任何一个国家。
在这种情况下,而不是隧道所有我们的交通,我们可能希望只发送流量的服务,我们的目标。不幸的是,sshuttle只接受IP地址参数,而不是主机名,所以我们需要利用dig来解析主机名:
sshuttle -r <server>dig +short <hostname>
Siege
Siege是一个HTTP的基准测试工具。除了负载测试功能,它有一个方便的-g选项,这是非常类似于curl的-iL,显示你的请求报头。下面是一个例子(为简便起见,我删除了一些头文件):
siege -g www.google.com
GET / HTTP/1.1
Host: www.google.com
User-Agent: JoeDog/1.00 [en] (X11; I; Siege 2.70) Connection: close
HTTP/1.1 302 Found
Location: http://www.google.co.uk/
Content-Type: text/html; charset=UTF-8
Server: gws
Content-Length: 221
Connection: close
GET / HTTP/1.1
Host: www.google.co.uk
User-Agent: JoeDog/1.00 [en] (X11; I; Siege 2.70)
Connection: close
HTTP/1.1 200 OK
Content-Type: text/html; charset=ISO-8859-1
X-XSS-Protection: 1; mode=block
Connection: close
Siege是真正伟大的是服务器负载测试。就像ab(Apache的HTTP服务器基准测试工具),你可以向一个网站发送的并发请求数,看看它是如何处理的交通。用下面的命令,我们将测试
谷歌利用20个并发连接30秒,然后结束时得到一个很好的报告:
siege -c20 www.google.co.uk -b -t30s…
Lifting the server siege… done.
Transactions: 1400 hits
Availability: 100.00 %
Elapsed time: 29.22 secs
Data transferred: 13.32 MB
Response time: 0.41 secs
Transaction rate: 47.91 trans/sec
Throughput: 0.46 MB/sec
Concurrency: 19.53
Successful transactions: 1400
Failed transactions: 0
Longest transaction: 4.08
Shortest transaction: 0.08
siege的最有用的功能之一是,它可以采取一个文件的URL作为输入,然后点击这些URL,而不仅仅是一个单一的页面。进行负载测试,这是伟大的,因为你可以重放实时交通对您的网站,看看它是如何执行的,而不是只打一遍又一遍相同的URL。在这里将教你如何使用siege在另一台服务器上实现Apache日志的重播:
cut -d ‘ ‘ -f7 /var/log/apache2/access.log > urls.txtsiege -c<concurrency rate> -b -f urls.txt
Mitmproxy
mitmproxy是一个支持SSL的,人在中间,使您可以检查HTTP和HTTPS流量,在飞行和重写请求的HTTP代理。
只能是有用的,看看什么样的移动应用程序发送的线或伪造高分,mitmproxy可以帮帮忙,提供了一整套的Web开发任务。例如,取代不断按F5或清除缓存,以确保你看到的最新内容,您可以运行
mitmproxy - anticache
它会自动去除所有缓存控制头和确保你总是新鲜的内容。不幸的是,它不会自动设置转发,你喜欢sshuttle做的,所以开始mitmproxy后,你还需要改变你的整个系统或特定浏览器的代理设置。
mitmproxy另一个非常方便的功能是记录和重放HTTP交互的能力。可以使用相同的技术,作为一个基本的Web测试框架。例如,确认您的用户SIGNUP流,你就可以开始会议记录:
mitmdump -w user-signup
然后通过用户注册过程中,在这一点上应该如预期般运作。停止记录会话,按Ctrl + C。在任何时候,我们可以重播记录和检查的200状态码:
mitmdump -c user-signup | tail -n1 | grep 200 && echo “OK” || echo “FAIL”
如果申请流程被分解在任何时候,我们将看到一个FAIL的消息,而不是OK。您可以创建这些测试和一整套,他们定期运行,以确保如果您不小心破坏了任何网站上的东西,能够收到通知。