作为一名Web开发者,当程序出现问题时日子总不是那么好过。问题可能无处不在,可能是你发送的请求出了错,可能是回复出了错,可能是你使用的某个第三方库出了问题,又或者是一个外部API调用失败了。优秀的工具对于定位问题出在何处有着无可估量的价值,而且能在一开始就帮助我们阻止问题的出现,总的来说能使我们的工作更有效率。命令行工具尤其有用,因为它们非常易于做自动化和脚本处理,能够以各种不同的方式进行组合和重用。本文介绍了6个非常强大且灵活的工具,熟练使用这些工具能使你的生活变得更轻松一些。
Curl
Curl是一个网络传输工具,同wget非常相似。主要的区别在于wget默认是保存到文件,而curl将输出定向到命令行上。这使得curl能非常方便的查看站点的内容。比如,我们可以从ifconfig.me站点得到我们本机的IP地址:
- $curlifconfig.me
- 93.96.141.93
Curl的-i(查看header)和-I(只显示header)选项使得调试HTTP响应以及查看服务器究竟发送给你了什么变得非常有用:
- $curl-Inews.ycombinator.com
- HTTP/1.1200OK
- Content-Type:text/html;charset=utf-8
- Cache-Control:private
- Connection:close
-L选项也很有用,能让curl自动跟踪重定向。Curl支持HTTP基本认证,cookies,手动设定headers以及更多有用的功能。
Ngrep
如果要分析网络数据包,我们有Wireshark,它有着上千种设定、过滤器以及配置选项。它还有一个命令行版本Tshark。如果只是针对简单的任务,我觉得Wireshark就太重量级了,所以除非我需要更强大的功能,一般情况下就用ngrep来处理了。Ngrep可以让你像类似grep处理文件的方式来处理网络封包。
针对Web流量,你几乎总是想要加上-W byline选项,这会保留换行符,而-q选项可以抑制某些非匹配数据包而产生的输出。下面是一个抓取所有包含有GET或POST请求数据包的例子:
- ngrep–q–Wbyline“^(GET|POST).*”
你也可以传入附加的报文过滤选项,比如限制匹配的报文只针对某个特定的主机,IP或端口。这里我们把所有流经Google的流量做一个过滤,只针对80端口且报文中包含“search”。
- ngrep–q–Wbyline“search”hostwww.google.comandport80
Netcat
Netcat或者叫nc,这是一个自称是网络中的瑞士军刀般的工具。它很简单但也非常强大和灵活,允许你创建任意的网络连接。这里我们来看看如何把它作为一个端口扫描器:
- $nc–zexample.com20-100
- Connectiontoexample.com22port[tcp/ssh]succeeded!
- Connectiontoexample.com80port[tcp/ssh]succeeded!
除了能够创建任意的连接,Netcat还能够监听传入的连接。这里我们利用nc的这个功能再配合tar来快速有效的在服务器之间拷贝文件。在服务器端,运行:
- $nc–l9090|tar–xzf–
在客户端运行:
- $tar–czfdir/|ncserver9090
我们可以使用Netcat把任何应用通过网络暴露出来,这里我们通过8080端口将shell暴露出来:
- $mkfifobackpipe
- $nc–l80800<backpipe|/bin/bash>backpipe
现在我们可以通过任意一台客户机来访问服务器了:Linode
- $ncexample.com8080
- uname–a
- Linuxli228-1622.6.39.1-linode34
尽管后面这两个例子有些投机取巧的成分(现实中你应该使用类似rsync这样的工具来拷贝文件,用SSH来远程登录服务器),它们还是展示出了Netcat的强大和灵活,通过结合netcat和其它的应用你可以实现很多不同的事情。
Sshuttle
Sshuttle允许你通过任意一台可SSH访问的服务器来为你的流量建立安全的隧道。搭建和使用都非常简单,不需要你在服务器上安装任何软件或者修改任何本地代理设定。当你在非安全的公共WiFi或其他不受信任的网络中时,通过SSH让流量走安全隧道,这样就可避免类似Firesheep或dsniff这样的工具的侵扰。所有的网络通讯,包括DNS请求都会发送到你的SSH服务器:
- $sshuttle–r<server>--dns0/0
如果你提供了—daemon参数,sshuttle会以守护进程的形式在后台运行。结合一些其他的选项,你可以使用别名形式来简单快速的启动和停止安全隧道:
- aliastunnel=’sshuttle–D–pidfile=/tmp/sshuttle.pid–r<server>--dns0/0’
- aliasstoptunnel=’[[-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>`
Siege
Siege是一个HTTP基准测试工具。除了负载测试功能外,它还有一个很方便的-g选项,这非常类似于curl的-iL,只是这里Siege也会输出请求header。这里是针对Google的一个例子(为了简洁我拿掉了一些header)
- $siege-gwww.google.com
- GET/HTTP/1.1
- Host:www.google.com
- User-Agent:JoeDog/1.00[en](X11;I;Siege2.70)
- Connection:close
- HTTP/1.1302Found
- 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;Siege2.70)
- Connection:close
- HTTP/1.1200OK
- Content-Type:text/html;charset=ISO-8859-1
- X-XSS-Protection:1;mode=block
- Connection:close
Siege真正在行的是服务器的负载测试。就像ab(一款Apache HTTP服务基准测试工具)一样,你可以向站点发送并发请求,并查看它如何处理流量。用下面的命令,我们会在30秒内向Google发起20个并发连接,最后会得到一个漂亮的测试报告。
- $siege-c20www.google.co.uk-b-t30s
- ...
- Liftingtheserversiege...done.
- Transactions:1400hits
- Availability:100.00%
- Elapsedtime:29.22secs
- Datatransferred:13.32MB
- Responsetime:0.41secs
- Transactionrate:47.91trans/sec
- Throughput:0.46MB/sec
- Concurrency:19.53
- Successfultransactions:1400
- Failedtransactions:0
- Longesttransaction:4.08
- Shortesttransaction:0.08
Siege最有用的一个特性是它可以把一个记录URL的文件作为输入,然后“点击”这些URL,而不是只处理一个单独的页面。这对于负载测试来说很有用,因为你可以对站点重现真实的流量并观察站点如何处理,而不必一遍又一遍重复点击同一个URL。下面是你用Siege来重现Apache对另一台服务器的日志记录,以做负载测试的例子:
- $cut-d''-f7/var/log/apache2/access.log>urls.txt
- $siege-c<concurrencyrate>-b-furls.txt
Mitmproxy
Mitmproxy是一个支持SSL的HTTP中间人代理工具,它允许你检查HTTP和HTTPS流量并支持直接改写请求。这个应用曾经在一些有关iOS应用的隐私丑闻中都出现过,包括Path的地址簿上传丑闻。它的直接改写请求的能力也被用来针对iOS平台,其应用包括在GameCenter中伪造一个虚假的高分数值。
Mitmproxy可不只是用来查看移动应用发送了些什么内容或者是伪造几个高分数值那么简单。它同样可以为Web开发者解决很多问题。比如,之前我们需要不停点击F5键或者清除缓存才能保证看到最新的内容,现在你可以运行:
- $mitmproxy--anticache
这样将自动去掉缓存控制相关的header,并确保你总是获取到刷新后的内容。不幸的是,这并不会像sshuttle那样自动为你设定转发功能,所以启动mitmproxy之后你还需要修改全局或者特定于浏览器的代理设置。
mitmproxy另一个非常给力的功能是记录并重现HTTP的交互过程。官方文档给出了一个关于无线网络登录的例子。同样的技术也能够用来作为基本的Web测试框架。比如,为了确认你的用户注册流程是否正常工作,你可以开启记录会话:
- $mitmdump-wuser-signup
然后跑一遍用户注册流程,目前为止应该能如预期般的工作。用Ctrl+C来停止记录。在任意时刻我们都能重现刚刚记录到的交互过程,并检查200状态码:
- $mitmdump-cuser-signup|tail-n1|grep200&&echo"OK"||echo"FAIL"
如果注册流程中的任意一点出了问题,我们将看到FAIL消息而不是OK。你可以创建一整套这类测试套件,并经常执行这类测试以确保当站点突然出现故障时你会得到提示。
来自:伯乐在线
相关推荐
developers开发人员的macOS命令行工具 :white_medium_star: 现在有了模块化和插件! 您可以检查plugins文件夹: 欢迎添加新插件并不断改进现有插件,请多多关照! 开发人员管理Mac的终极工具。 它提供了大量的...
DevCon 实用工具是一种命令行实用工具,可以替代设备管理器。使用 DevCon,您可以启用、禁用、重新启动、更新、删除和查询单个设备或一组设备。DevCon 提供与开发人员有关但无法在设备管理器中看到的信息。 您...
Microsoft SQL Server 2005 Command Line Query Utility (Microsoft SQL Server 2005 命令行查询工具) 用户使用 SQLCMD 实用工具...用户:客户、伙伴、开发人员 X86 Package (SQLServer2005_SQLCMD.msi) - 2533 KB
DevCon 实用工具是一种命令行实用工具,可以替代设备管理器。使用 DevCon,您可以启用、禁用、重新启动、更新、删除和查询单个设备或一组设备。DevCon 提供与开发人员有关但无法在设备管理器中看到的信息
DevCon实用工具是一种命令行实用工具。 使用 DevCon,您可以启用、禁用、重新启动、更新、删除和查询单个设备或一组设备。 DevCon 提供与开发人员有关但无法在设备管理器中看到的信息。 可以完全取代系统自带的设备...
这主要供开发人员使用。 它用Rust编写。 因此,它被编译并分发为二进制文件。 它最初是在vim中写入备用文件的,但是完全不依赖于vim,并且由于只是命令行实用程序,因此可以在许多其他情况下使用。 它的界面非常...
目前,这使该工具对90%的人无用,但是研究XVD文件如何工作的开发人员将找到XVD结构的详细映射以及用于操作它们的几乎完整的方法。 但是此工具没有提供加密密钥,您必须自己找到它们。 以下提供了开发人员密钥的...
开发人员工具:Vim,bash,制表符补全,curl,git,GNU核心实用程序,Python,Ruby等 开发人员应用程序:iTerm2,Sublime Text,Atom,VirtualBox,Vagrant,Docker,Chrome等 Python数据分析:IPython Notebook,...
Corkdev.io是位于爱尔兰科克的软件开发人员的聚会。 该工具是在cordev.io上的一个名为“块中的'Node'小子”的演讲中创建的。安装npm i corkdev.io -g用法# run on your terminal to get the latest meetup ...
git趋势 一个用于在GitHub上获取趋势库和开发人员的命令行实用程序。 存储库-该工具将打印详细信息,例如存储库的名称,所有者,星号和语言。 开发人员-该工具将打印趋势开发人员的详细信息,例如其用户名,名称,...
您需要在每个服务提供商处注册为开发人员才能获取密钥。 下一个计划功能: 清理调试输出 更强大的 OneDrive 上传 上传和下载的进度显示。 更强大的哈希错误处理。 用法 ./multidrive -h 显示帮助 ./multidrive...
* 可扩展的接口,使独立软件供给商和企业开发人员能够构建自定义 cmdlet 以满足特有的应用程序和系统治理要求。 安装本更新程序后,可能需要重新启动计算机。我们根据 Windows Vista 许可条款向您提供本更新程序并...
节点命令行启动器节目主持人很懒惰。... -终端字符串样式在终端中创建盒子开发人员实用程序-代码格式化程序可帮助创建常规提交消息的 Util Lint您的提交消息,以确保您使用常规提交和林特(Lint)已暂存
附录内容包括命令行基础,安装运行Django,实用Django开发工具,发现、评估、使用Django应用程序,在Google App Engine上使用Django,参与Django项目。 本书适用于Python框架Django初学者,Django Web开发技术人员。
对于只有一个开发人员或非常小的团队的较简单项目,您只需将此存储库克隆到用户的drush目录(例如〜/ .drush)中即可。 对于较大的团队,我们建议将此项目添加为作曲家库,例如, composer require acquia/acsf-...
用于64位window8;...DevCon实用工具是一种命令行实用工具。使用 DevCon,您可以启用、禁用、重新启动、更新、删除和查询单个设备或一组设备。DevCon 提供与开发人员有关但无 法在设备管理器中看到的信息。
创建此工具的动机是帮助自动化开发人员在使用AWS lambda创建api时必须执行的重复步骤。 除了已经存在的令人赞叹的aws sam cli工具之外,对于每个新功能和堆栈,开发人员还需要: 创建一个新文件夹 复制粘贴模板代码...
本书是一本资源丰富、可随时查询的实例手册,针对开发人员要解决的具体问题,提供有助于高效完成工作的实用建议。书中包括大量绝妙的代码示例,可以直接应用到开发人员的研发项目中,为你节省大量时间。 本书主要...
使用cl.exe 19.24.28314版本,gcc版本8.3.0和clang 9.0.0测试在Windows上,运行build.bat (假设您正在运行具有开发人员工具的终端,例如cl.exe) 在linux / macos上,运行./build.sh (假设您正在运行bash并具有...
wchtools声学内容开发人员工具概括声学内容(以前是Watson Content Hub或WCH)开发人员工具提供了基于命令行界面(CLI)的实用程序,称为wchtools,用于处理声学内容。 此实用程序允许开发人员或其他用户从“声学...