软件开发人员的6个实用命令行工具
优秀的工具对于定位问题出在何处有着无可估量的价值,而且能在一开始就帮助我们阻止问题的出现,总的来说能使我们的工作更有效率。命令行工具尤其有用,因为它们非常易于做自动化和脚本处理,能够以各种不同的方式进行组合和重用。本文介绍了6个非常强大且灵活的工具,熟练使用这些工具能使你的生活变得更轻松一些。
Curl
Curl是一个网络传输工具,同wget非常相似。主要的区别在于wget默认是保存到文件,而curl将输出定向到命令行上。这使得curl能非常方便的查看站点的内容。比如,我们可以从站点得到我们本机的IP地址:
123 |
|
Curl的-i(查看header)和-I(只显示header)选项使得调试HTTP响应以及查看服务器究竟发送给你了什么变得非常有用:
12345 | $ curl -I .1 200 OK ; 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请求数据包的例子:
1 | ngrep –q –W byline “^(GET|POST) .*” |
你也可以传入附加的报文过滤选项,比如限制匹配的'报文只针对某个特定的主机,IP或端口。这里我们把所有流经Google的流量做一个过滤,只针对80端口且报文中包含“search”。
1 | ngrep –q –W byline “search” host and port 80 |
Netcat
Netcat或者叫nc,这是一个自称是网络中的瑞士军刀般的工具。它很简单但也非常强大和灵活,允许你创建任意的网络连接。这里我们来看看如何把它作为一个端口扫描器:
123 | $ nc –z 20-100 ] succeeded! ] succeeded! |
除了能够创建任意的连接,Netcat还能够监听传入的连接。这里我们利用nc的这个功能再配合tar来快速有效的在服务器之间拷贝文件。在服务器端,运行:
1 | –xzf – |
在客户端运行:
1 | / | nc server 9090 |
我们可以使用Netcat把任何应用通过网络暴露出来,这里我们通过8080端口将shell暴露出来:
12 | backpipe > backpipe |
现在我们可以通过任意一台客户机来访问服务器了:linode
123 | $ nc 8080 –a ##1 SMP Tue Jun 21 10:29:24 EDT 2011 i686 GNU/Linux |
尽管后面这两个例子有些投机取巧的成分(现实中你应该使用类似rsync这样的工具来拷贝文件,用SSH来远程登录服务器),它们还是展示出了Netcat的强大和灵活,通过结合netcat和其它的应用你可以实现很多不同的事情。
Sshuttle
Sshuttle允许你通过任意一台可SSH访问的服务器来为你的流量建立安全的隧道。搭建和使用都非常简单,不需要你在服务器上安装任何软件或者修改任何本地代理设定。当你在非安全的公共WiFi或其他不受信任的网络中时,通过SSH让流量走安全隧道,这样就可避免类似Firesheep或dsniff这样的工具的侵扰。所有的网络通讯,包括DNS请求都会发送到你的SSH服务器:
1 | /0 |
如果你提供了—daemon参数,sshuttle会以守护进程的形式在后台运行。结合一些其他的选项,你可以使用别名形式来简单快速的启动和停止安全隧道:
12 | ’ `’ |
你也可以使用sshuttle来解决一些基于IP的地理定位筛选的问题,如今有很多服务都在使用这种应用比如BBC的iPlayer就需要你在英国,还有Turntable,需要你在美国。要绕过这种限制,你需要访问到位于该国的某个服务器。Amazon在许多国家都有免费的E2C微实例,或者你也可以找一个便宜的vps,几乎世界上任何国家都有。
在这个例子中,我们不需要让所有的流量都走隧道,我们只需要针对目标服务的流量就行了。
不幸的是sshuttle只接受IP地址作为参数,不支持主机名,所以我们还得先用dig来解析出主机名。
1 | >` |
Siege
Siege是一个HTTP基准测试工具。除了负载测试功能外,它还有一个很方便的-g选项,这非常类似于curl的-iL,只是这里Siege也会输出请求header。这里是针对Google的一个例子(为了简洁我拿掉了一些header)
12345678910111213141516171819202122 | $ siege -g .1 Host: .00 [en] (X11; I; Siege 2.70) Connection: close .1 302 Found ; charset=UTF-8 Server: gws Content-Length: 221 Connection: close .1 Host: .00 [en] (X11; I; Siege 2.70) Connection: close .1 200 OK ; charset=ISO-8859-1 X-XSS-Protection: 1; mode=block Connection: close |
Siege真正在行的是服务器的负载测试。就像ab(一款Apache HTTP服务基准测试工具)一样,你可以向站点发送并发请求,并查看它如何处理流量。用下面的命令,我们会在30秒内向Google发起20个并发连接,最后会得到一个漂亮的测试报告。
123456789101112131415 | $ siege -c20 -b -t30s ... . Transactions: 1400 hits Availability: 100.00 % : 29.22 secs Data transferred: 13.32 MB : 0.41 secs /sec /sec Concurrency: 19.53 Successful transactions: 1400 Failed transactions: 0 Longest transaction: 4.08 Shortest transaction: 0.08 |
Siege最有用的一个特性是它可以把一个记录URL的文件作为输入,然后“点击”这些URL,而不是只处理一个单独的页面。这对于负载测试来说很有用,因为你可以对站点重现真实的流量并观察站点如何处理,而不必一遍又一遍重复点击同一个URL。下面是你用Siege来重现Apache对另一台服务器的日志记录,以做负载测试的例子:
12 | > $ siege -c<concurrency rate> -b -f |
Mitmproxy
Mitmproxy是一个支持SSL的HTTP中间人代理工具,它允许你检查HTTP和HTTPS流量并支持直接改写请求。这个应用曾经在一些有关iOS应用的隐私丑闻中都出现过,包括Path的地址簿上传丑闻。它的直接改写请求的能力也被用来针对iOS平台,其应用包括在GameCenter中伪造一个虚假的高分数值。
Mitmproxy可不只是用来查看移动应用发送了些什么内容或者是伪造几个高分数值那么简单。它同样可以为Web开发者解决很多问题。比如,之前我们需要不停点击F5键或者清除缓存才能保证看到最新的内容,现在你可以运行:
1 | $ mitmproxy --anticache |
这样将自动去掉缓存控制相关的header,并确保你总是获取到刷新后的内容。不幸的是,这并不会像sshuttle那样自动为你设定转发功能,所以启动mitmproxy之后你还需要修改全局或者特定于浏览器的代理设置。
mitmproxy另一个非常给力的功能是记录并重现HTTP的交互过程。官方文档给出了一个关于无线网络登录的例子。同样的技术也能够用来作为基本的Web测试框架。比如,为了确认你的用户注册流程是否正常工作,你可以开启记录会话:
1 | $ mitmdump -w user-signup |
然后跑一遍用户注册流程,目前为止应该能如预期般的工作。用Ctrl+C来停止记录。在任意时刻我们都能重现刚刚记录到的交互过程,并检查200状态码:
1 | "FAIL" |
如果注册流程中的任意一点出了问题,我们将看到FAIL消息而不是OK。你可以创建一整套这类测试套件,并经常执行这类测试以确保当站点突然出现故障时你会得到提示。
相關文章
-
软件开发工具与软件开发环境分析
计算科学(或者科学计算)是关注构建数学模型和量化分析技术的研究领域,同时通过计算机分析和解决科学问题。下面是小编收集的软件开发工具与软件开发环境分析,希望大家认真阅读! 1)软件开发工具早期的软件开发,最早使 -
软件开发程序员个人年终工作总结
总结在一个时期、一个年度、一个阶段对学习和工作生活等情况加以回顾和分析的一种书面材料,它可以明确下一步的工作方向,少走弯路,少犯错误,提高工作效益,不如我们来制定一份总结吧。那么我们该怎么去写总结呢?以下是小编为 -
软件开发人员实习心得
软件开发人员实习心得1从学生到走上工作岗位,一步步的熟悉和认识着周围的环境,熟悉这社会生存之道!在这里我学到了我离开校园的第一笔知识,这些都是从书本上学不到的知识,从体验公司的文化到亲身接触公司的每个部门的人员 -
软件开发人员工作总结
金秋十月是个收获季节,希望我们每一天的生活都如这个季节一样,又一个月过去了,现对工作中收获与不足总结一、工作内容九月份的工作比较繁忙,工作重点有四方面:s6测试,医院软件开发、测试,售后服务,文档书写及培训。1、关于s6 -
软件开发实习个人总结范文
软件开发实习个人总结1这次实训使我们明白我们所欠缺的不仅仅是技术知识,更重要的是有一种处理事情的方法、面对问题的心态和动手能力。面对完全陌生的新知识、新技术、新项目以及整个IT行业,我们不能畏惧,要以一种积极 -
软件开发人员工作总结范文
1、分享第一条经验:“学历代表过去、能力代表现在、学习力代表未来。”其实这是一个来自国外教育领域的一个研究结果。相信工作过几年、十几年的朋友对这个道理有些体会吧。但我相信这一点也很重要:“重要的道理明白太 -
软件开发工程师个人年终工作总结范文
作为一个软件开发工程师(我也是一名软件开发工程师),所实在的如果每年只做那么一两个项目,年终工作总结写起来也应该得心应手的,我们只需要把本年度该项目的基本情况简历表述一下,自己在项目中的角色以及自己在项目中遇到的 -
软件研发部程序员年度个人工作总结
总结是在某一特定时间段对学习和工作生活或其完成情况,包括取得的成绩、存在的问题及得到的经验和教训加以回顾和分析的书面材料,它可使零星的、肤浅的、表面的感性认知上升到全面的、系统的、本质的理性认识上来,不妨让 -
CAD软件15个命令走天下
最近小编在网上看到CAD15个基本命令,觉得对CAD初学者非常有帮助,下面分享给大家! 1、 线命令:line快捷命令:L操作方式:输入L→空格→屏幕上点第一点→点第二点 点第三点 空格 完毕,当然你也可以无休止的画 -
软件开发程序员工作总结范文
过去的一年,在马总的亲切关怀,伍经理的殷勤管理与认真指导,软件研发部的团结协作,以及在公司这充满奋斗的环境下,我以严肃认真的工作态度和百折不饶的精神,努力的完成了公司的各项工作,在软件研发、团队协作和个人成长上也取