推薦給開發人員的實用命令行工具

摘要:優秀的工具對于定位問題出在何處有著無可估量的價值,而且能在一開始就幫助我們阻止問題的出現,總的來說能使我們的工作更有效率。本文介紹了6個非常強大且靈活的工具,熟練使用這些工具能使你的生活變得更輕松一些。

作為一名Web開發者,當程序出現問題時日子總不是那么好過。問題可能無處不在,可能是你發送的請求出了錯,可能是回復出了錯,可能是你使用的某個第三方庫出了問題,又或者是一個外部API調用失敗了。優秀的工具對于定位問題出在何處有著無可估量的價值,而且能在一開始就幫助我們阻止問題的出現,總的來說能使我們的工作更有效率。命令行工具尤其有用,因為它們非常易于做自動化和腳本處理,能夠以各種不同的方式進行組合和重用。本文介紹了6個非常強大且靈活的工具,熟練使用這些工具能使你的生活變得更輕松一些。

Curl

Curl是一個網絡傳輸工具,同wget非常相似。主要的區別在于wget默認是保存到文件,而curl將輸出定向到命令行上。這使得curl能非常方便的查看站點的內容。比如,我們可以從ifconfig.me站點得到我們本機的IP地址:

  1. $?curl?ifconfig.me ?
  2. 93.96.141.93?

Curl的-i(查看header)和-I(只顯示header)選項使得調試HTTP響應以及查看服務器究竟發送給你了什么變得非常有用:

  1. $?curl?-I?news.ycombinator.com ?
  2. ?
  3. HTTP/1.1?200?OK? ?
  4. ?
  5. Content-Type:?text/html;?charset=utf-8 ?
  6. ?
  7. Cache-Control:?private ?
  8. ?
  9. 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?www.google.com?and?port?80?

Netcat

Netcat或者叫nc,這是一個自稱是網絡中的瑞士軍刀般的工具。它很簡單但也非常強大和靈活,允許你創建任意的網絡連接。這里我們來看看如何把它作為一個端口掃描器:

  1. $?nc?–z?example.com?20-100 ?
  2. ?
  3. Connection?to?example.com?22?port?[tcp/ssh]?succeeded! ?
  4. ?
  5. Connection?to?example.com?80?port?[tcp/ssh]?succeeded!?

除了能夠創建任意的連接,Netcat還能夠監聽傳入的連接。這里我們利用nc的這個功能再配合tar來快速有效的在服務器之間拷貝文件。在服務器端,運行:

  1. $nc?–l?9090?|?tar?–xzf?–?

在客戶端運行:

  1. $tar?–czf?dir/?|?nc?server?9090?

我們可以使用Netcat把任何應用通過網絡暴露出來,這里我們通過8080端口將shell暴露出來:

  1. $?mkfifo?backpipe ?
  2. ?
  3. $?nc?–l?8080?0<backpipe?|?/bin/bash?>?backpipe ?
  4. ?

現在我們可以通過任意一臺客戶機來訪問服務器了:Linode

  1. $?nc?example.com?8080 ?
  2. ?
  3. uname?–a ?
  4. ?
  5. 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訪問的服務器來為你的流量建立安全的隧道。搭建和使用都非常簡單,不需要你在服務器上安裝任何軟件或者修改任何本地代理設定。當你在非安全的公共WiFi或其他不受信任的網絡中時,通過SSH讓流量走安全隧道,這樣就可避免類似Firesheep或dsniff這樣的工具的侵擾。所有的網絡通訊,包括DNS請求都會發送到你的SSH服務器:

  1. $?sshuttle?–r?<server>?--dns?0/0?

如果你提供了—daemon參數,sshuttle會以守護進程的形式在后臺運行。結合一些其他的選項,你可以使用別名形式來簡單快速的啟動和停止安全隧道:

  1. alias?tunnel=’sshuttle?–D?–pidfile=/tmp/sshuttle.pid?–r?<server>?--dns?0/0’ ?
  2. ?
  3. alias?stoptunnel=’[[?-f?/tmp/sshuttle.pid?]]?&&?kill?`cat?/tmp/sshuttle.pid`’?

你也可以使用sshuttle來解決一些基于IP的地理定位篩選的問題,如今有很多服務都在使用這種應用比如BBC的iPlayer就需要你在英國,還有Turntable,需要你在美國。要繞過這種限制,你需要訪問到位于該國的某個服務器。Amazon在許多國家都有免費的E2C微實例,或者你也可以找一個便宜的vps,幾乎世界上任何國家都有。

在這個例子中,我們不需要讓所有的流量都走隧道,我們只需要針對目標服務的流量就行了。

不幸的是sshuttle只接受IP地址作為參數,不支持主機名,所以我們還得先用dig來解析出主機名。

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

Siege

Siege是一個HTTP基準測試工具。除了負載測試功能外,它還有一個很方便的-g選項,這非常類似于curl的-iL,只是這里Siege也會輸出請求header。這里是針對Google的一個例子(為了簡潔我拿掉了一些header)

  1. $?siege?-g?www.google.com ?
  2. ?
  3. GET?/?HTTP/1.1 ?
  4. ?
  5. Host:?www.google.com ?
  6. ?
  7. User-Agent:?JoeDog/1.00?[en]?(X11;?I;?Siege?2.70) ?
  8. ?
  9. Connection:?close ?
  10. ?
  11. HTTP/1.1?302?Found ?
  12. ?
  13. Location:?http://www.google.co.uk/ ?
  14. ?
  15. Content-Type:?text/html;?charset=UTF-8 ?
  16. ?
  17. Server:?gws ?
  18. ?
  19. Content-Length:?221 ?
  20. ?
  21. Connection:?close ?
  22. ?
  23. GET?/?HTTP/1.1 ?
  24. ?
  25. Host:?www.google.co.uk ?
  26. ?
  27. User-Agent:?JoeDog/1.00?[en]?(X11;?I;?Siege?2.70) ?
  28. ?
  29. Connection:?close ?
  30. ?
  31. HTTP/1.1?200?OK ?
  32. ?
  33. Content-Type:?text/html;?charset=ISO-8859-1 ?
  34. ?
  35. X-XSS-Protection:?1;?mode=block ?
  36. ?
  37. Connection:?close?

Siege真正在行的是服務器的負載測試。就像ab(一款Apache HTTP服務基準測試工具)一樣,你可以向站點發送并發請求,并查看它如何處理流量。用下面的命令,我們會在30秒內向Google發起20個并發連接,最后會得到一個漂亮的測試報告。

  1. $?siege?-c20?www.google.co.uk?-b?-t30s ?
  2. ?
  3. ... ?
  4. ?
  5. Lifting?the?server?siege...?done. ?
  6. ?
  7. Transactions:?1400?hits ?
  8. ?
  9. Availability:?100.00?% ?
  10. ?
  11. Elapsed?time:?29.22?secs ?
  12. ?
  13. Data?transferred:?13.32?MB ?
  14. ?
  15. Response?time:?0.41?secs ?
  16. ?
  17. Transaction?rate:?47.91?trans/sec ?
  18. ?
  19. Throughput:?0.46?MB/sec ?
  20. ?
  21. Concurrency:?19.53 ?
  22. ?
  23. Successful?transactions:?1400 ?
  24. ?
  25. Failed?transactions:?0 ?
  26. ?
  27. Longest?transaction:?4.08 ?
  28. ?
  29. Shortest?transaction:?0.08?

Siege最有用的一個特性是它可以把一個記錄URL的文件作為輸入,然后“點擊”這些URL,而不是只處理一個單獨的頁面。這對于負載測試來說很有用,因為你可以對站點重現真實的流量并觀察站點如何處理,而不必一遍又一遍重復點擊同一個URL。下面是你用Siege來重現Apache對另一臺服務器的日志記錄,以做負載測試的例子:

  1. $?cut?-d?'?'?-f7?/var/log/apache2/access.log?>?urls.txt ?
  2. ?
  3. $?siege?-c<concurrency?rate>?-b?-f?urls.txt?

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. $?mitmdump?-c?user-signup?|?tail?-n1?|?grep?200?&&?echo?"OK"?||?echo?"FAIL"?

如果注冊流程中的任意一點出了問題,我們將看到FAIL消息而不是OK。你可以創建一整套這類測試套件,并經常執行這類測試以確保當站點突然出現故障時你會得到提示。

來自:伯樂在線

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/449717.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/449717.shtml
英文地址,請注明出處:http://en.pswp.cn/news/449717.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

雷軍:啟動手機+AIoT雙引擎戰略 5G春天到來前打持久戰

雷帝網 樂天 1月11日報道 小米CEO雷軍今日在小米年會上宣布&#xff0c;2019年&#xff0c;小米將正式啟動“手機AIoT”雙引擎戰略&#xff0c;這將是小米未來五年的核心戰略。未來5年&#xff0c;小米將在AIoT領域持續投入超過100億元。從2019年起&#xff0c;AIoT&#xff0c…

Jenkins自定義主題

x下載自定義樣式 http://afonsof.com/jenkins-material-theme/ 打開連接 最后點擊&#xff1a;DOWNLOAD TOUR THEME! 得到樣式文件&#xff1a;jenkins-material-theme.css 上傳樣式文件到jenkins 將jenkins-material-theme.css 上傳到&#xff1a; /var/jenkins_home/userCont…

SSH (Secure Shell)詳解

Secure Shell&#xff08;SSH&#xff09;是一種加密 網絡協議&#xff0c;用于在不安全的網絡上安全地運行網絡服務。 SSH通過客戶端 - 服務器體系結構中的不安全網絡提供安全通道&#xff0c;將SSH客戶端應用程序與SSH服務器相連接。 常見的應用程序包括遠程命令行登錄和遠程…

股票配對收益

import pandas as pd import numpy as npimport matplotlib.pyplot as plt plt.rcParams[font.sans-serif] [SimHei] # 字體設置 import matplotlib matplotlib.rcParams[axes.unicode_minus]False # 負號顯示問題from arch.unitroot import ADF …

YUV420、YUV422、RGB24轉換

//平面YUV422轉平面RGB24 static void YUV422p_to_RGB24(unsigned char *yuv422[3], unsigned char *rgb24, int width, int height) { int R,G,B,Y,U,V; int x,y; int nWidth width>>1; //色度信號寬度 for (y0;y<height;y) { for (x0;x<width;x) { …

最長非下降子序列(O(nlogn))(offer收割)

題目 如題 思路 核心思想是&#xff0c;維護一個數組ends&#xff0c;它記錄了長度為k的子序列的末尾元素的最小值。聽起來很抽象&#xff0c;我們不妨手動演示一遍整個過程。 假設數組a{2,9,4,27,29,15,7}&#xff0c;令length表示當前找到的最長非下降子序列的長度。初始時le…

[Python]小甲魚Python視頻第026課(字典:當索引不好用時2)課后題及參考解答

# -*- coding: utf-8 -*- """ Created on Fri Mar 8 10:32:20 2019author: Administrator """"""測試題&#xff1a;0. Python的字典是否支持一鍵&#xff08;Key&#xff09;多值&#xff08;Value&#xff09;&#xff1f;不支…

2021-08-12 畫蠟燭線

畫蠟燭線 pip install https://github.com/matplotlib/mpl_finance/archive/master.zip from mpl_finance import candlestick_ochl import matplotlib.pyplot as plt from matplotlib.pylab import date2num# 先畫日K線 fig, axes plt.subplots(nrows1, ncols1, figsize(20, …

替換字符串列表中字符串

//替換字符串列表中字符串 procedure StringsReplace(var S : TStrings; OldPattern, NewPattern: string; Flags: TReplaceFlags);var i : integer; tmpstr : string;begin for i : 0 to S.Count -1 do begin tmpstr : S[i]; s[i] : StringReplace(tmpstr, Ol…

TCP/IP協議族 詳解(TCP/IP四層模型、OSI七層模型)

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 TCP/IP協議族&#xff08;TCP/IP Protocol Suite&#xff0c;或TCP/IP Protocols&#xff09;&#xff0c;簡稱TCP/IP。由于在網絡通訊協…

RGB 24和YUY2相互轉換

YUY2經常用于電視制式以及許多攝像頭的輸出格式.而我們在處理時經常需要將其轉化為RGB進行處理,這里簡單介紹下YUY2(YUV)與RGB之間相互轉化的關系: http://msdn2.microsoft.com/en-us/library/ms893078.aspx YUY2(YUV) To RGB: C Y - 16 D U - 128 E V - 128 R clip((…

通達信獲取數據

#python第三方庫pytdx獲取 from pytdx.hq import TdxHq_API api TdxHq_API() # 數據獲取接口一般返回list結構&#xff0c;如果需要轉化為pandas Dataframe接口&#xff0c;可以使用 api.to_df 進行轉化 with api.connect(119.147.212.81, 7709): # 返回普通list data …

ICMP (互聯網控制消息協議 )是什么

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 互聯網控制消息協議&#xff08;英語&#xff1a;Internet Control Message Protocol&#xff0c;縮寫&#xff1a;ICMP&#xff09;是互…

股票數據相關性分析

導入相關包 import pandas as pd import numpy as np import matplotlib.pyplot as plt from matplotlib.collections import LineCollection import akshare as ak from sklearn import cluster, covariance, manifold %matplotlib inline #Jupyter Notebook顯示圖形專用 plt…

分享一個輔助分析內存泄漏的腳本

最近給系統做了一點優化&#xff0c;前幾天去查看系統監控&#xff0c;想看看上線前后cpu使用率曲線變化情況。查看的時候意外發現上線前后內存占用相差不少&#xff0c;20%以上。 本來我沒怎么在意這個問題&#xff0c;因為我們系統會在運行過程中緩存部分數據內容。但客戶覺得…

windows Virtualbox下配置Ubuntu,且用ssh連接

1、軟件介紹 1&#xff09;virtualbox 5.2.22 2&#xff09;Ubuntu 18.04 3&#xff09;git bash 2、virtualbox設置 安裝完Ubuntu后點擊該鏡像的設置&#xff0c;依次點擊“網絡”——“端口轉發” 將主機端口設置為一個閑置端口&#xff0c;子系統端口也就是Ubuntu端口設置…

專訪劉偉:軟件開發人員的內功修煉之道

摘要&#xff1a;數學修養對軟件開發之路起著什么作用&#xff1f;碼農如何修煉自己的內功并成長為優秀的軟件開發員&#xff1f;帶著相關思考&#xff0c;社區之星第10期采訪了中南大學副教授——劉偉。他對數學修養、設計模式、軟件架構和重構方面的獨特見解&#xff0c;相信…

多線程數據下載(akshare)

import akshare as ak import pandas as pd from multiprocessing.dummy import Pool as ThreadPool import datetime import timedef get_hs300_stock_codes():獲取滬深300股票代碼列表:return:hs300ak.index_stock_cons_sina("000300")codeshs300[code]codescodes.…

MongoDB 4.6.1 c++ driver 編譯

版權聲明&#xff1a;本文為博主原創文章&#xff0c;未經博主同意不得轉載。https://blog.csdn.net/sheismylife/article/details/25512251 這個版本號已經和之前不一樣了。有專門的github的項目。https://github.com/mongodb/mongo-cxx-driver首先獲取源碼&#xff1a;git cl…

地址解析協議 (ARP) 是什么

地址解析協議 (ARP) 是通過解析網路層地址來找尋數據鏈路層地址的一個在網絡協議包中極其重要的網絡傳輸協議。 ARP是通過網絡地址(例&#xff1a;IPv4)來定位MAC地址 (也稱為乙太地址)。 ARP已經在很多網路層和數據鏈接層之間得以實現&#xff0c;包括IPv4&#xff0c;Chaosn…