1.iftop iftop可測量通過每一個套接字連接傳輸的數據;它採用的工作方式有別於nload。iftop使用pcap庫來捕獲進出網路適配器的數據包,然後彙總數據包大小和數量,搞清楚總的帶寬使用情況。 雖然iftop報告每個連接所使用的帶寬,但它無法報告參與某個套按字連接的進程名稱/編號(ID)。 ...
1.iftop
iftop可測量通過每一個套接字連接傳輸的數據;它採用的工作方式有別於nload。iftop使用pcap庫來捕獲進出網路適配器的數據包,然後彙總數據包大小和數量,搞清楚總的帶寬使用情況。
雖然iftop報告每個連接所使用的帶寬,但它無法報告參與某個套按字連接的進程名稱/編號(ID)。不過由於基於pcap庫,iftop能夠過濾流量,並報告由過濾器指定的所選定主機連接的帶寬使用情況。
iftop的輸出從整體上可以分為三大部分。
第一部分是iftop輸出中最上面的一行,此行信息是流量刻度,用於顯示網卡帶寬流量。
第二部分是iftop輸出中最大的一個部分,此部分又分為左、中、右三列,左列和中列記錄了哪些IP或主機正在和本機的網路進行連接。其中,中列的“=>”代表發送數據,“<=”代表接收數據,通過這個指示箭頭可以很清晰地知道兩個IP之間的通信情況。最右列又分為三小列,這些實時參數分別表示外部IP連接到本機2s、10s和40s內的平均流量值。另外,這個部分還有一個流量圖形條,流量圖形條是對流量大小的動態展示,以第一部分中的流量刻度為基準。通過這個流量圖形條可以很方便地看出哪個IP的流量最大,進而迅速定位網路中可能出現的流量問題。
第三部分位於iftop輸出的最下麵,可以分為三行,其中,“TX”表示發送數據,“RX”表示接收數據,“TOTAL”表示發送和接收的全部流量。與這三行對應的有三列,其中,“cum”列表示從運行iftop到目前的發送、接收和總數據流量;“peak”列表示發送、接收以及總的流量峰值;“rates”列表示過去2s、10s、40s內的平均流量值。
在iftop的實時監控界面中,還可以對輸出結果進行互動式操作,用於對輸出信息進行整理和過濾,在圖2-1所示界面中,按“h”鍵即可進入交互選項界面:
2.MTR
Mtr是 Linux中有一個非常棒的網路連通性判斷工具,它結合了ping, traceroute,nslookup 的相關特性。
[root@d_bbszb_web01 ~]# mtr -h
usage: mtr [-hvrwctglspniu46] [--help] [--version] [--report]
[--report-wide] [--report-cycles=COUNT] [--curses] [--gtk]>
[--raw] [--split] [--no-dns] [--address interface]
[--psize=bytes/-s bytes][--interval=SECONDS] HOSTNAME [PACKETSIZE]
報告說明:
第一列:顯示的是IP地址和本機功能變數名稱,這點和tracert很像
第二列:snt:10 設置每秒發送數據包的數量,預設值是10 可以通過參數 -c來指定。
第三列:是顯示的每個對應IP的丟包率
第四列:顯示的最近一次的返回時延
第五列:是平均值 這個應該是發送ping包的平均時延
第六列:是最好或者說時延最短的
第七列:是最差或者說時延最常的
第八列:是標準偏差
3.traceroute
通過traceroute我們可以知道信息從你的電腦到互聯網另一端的主機是走的什麼路徑。當然每次數據包由某一同樣的出發點(source)到達某一同樣的目的地(destination)走的路徑可能會不一樣,但基本上來說大部分時候所走的路由是相同的。linux系統中,我們稱之為traceroute,在MS Windows中為tracert。
traceroute通過發送小的數據包到目的設備直到其返回,來測量其需要多長時間。
(1).命令格式:
traceroute[參數][主機]
(2).命令功能:
traceroute指令讓你追蹤網路數據包的路由途徑,預設數據包大小是40Bytes,用戶可另行設置。
具體參數格式:traceroute [-dFlnrvx][-f<存活數值>][-g<網關>...][-i<網路界面>][-m<存活數值>][-p<通信埠>][-s<來源地址>][-t<服務類型>][-w<超時秒數>][主機名稱或IP地址][數據包大小]
(3).命令參數:
-d 使用Socket層級的排錯功能。
-f 設置第一個檢測數據包的存活數值TTL的大小。
-F 設置勿離斷位。
-g 設置來源路由網關,最多可設置8個。
-i 使用指定的網路界面送出數據包。
-I 使用ICMP回應取代UDP資料信息。
-m 設置檢測數據包的最大存活數值TTL的大小。
-n 直接使用IP地址而非主機名稱。
-p 設置UDP傳輸協議的通信埠。
-r 忽略普通的Routing Table,直接將數據包送到遠端主機上。
-s 設置本地主機送出數據包的IP地址。
-t 設置檢測數據包的TOS數值。
-v 詳細顯示指令的執行過程。
-w 設置等待遠端主機回報的時間。
-x 開啟或關閉數據包的正確性檢驗。
記錄按序列號從1開始,每個紀錄就是一跳 ,每跳錶示一個網關,我們看到每行有三個時間,單位是 ms,其實就是-q的預設參數。探測數據包向每個網關發送三個數據包後,網關響應後返回的時間;如果您用 traceroute -q 4 www.58.com ,表示向每個網關發送4個數據包。
有時我們traceroute 一臺主機時,會看到有一些行是以星號表示的。出現這樣的情況,可能是防火牆封掉了ICMP的返回信息,所以我們得不到什麼相關的數據包返回數據。
有時我們在某一網關處延時比較長,有可能是某台網關比較阻塞,也可能是物理設備本身的原因。當然如果某台DNS出現問題時,不能解析主機名、功能變數名稱時,也會 有延時長的現象;您可以加-n 參數來避免DNS解析,以IP格式輸出數據。
如果在區域網中的不同網段之間,我們可以通過traceroute 來排查問題所在,是主機的問題還是網關的問題。如果我們通過遠程來訪問某台伺服器遇到問題時,我們用到traceroute 追蹤數據包所經過的網關,提交IDC服務商,也有助於解決問題;但目前看來在國內解決這樣的問題是比較困難的,就是我們發現問題所在,IDC服務商也不可能幫助我們解決。
其他示例:
跳數設置 traceroute -m 10 www.baidu.com
顯示IP地址,不查主機名 traceroute -n www.baidu.com
探測包使用的基本UDP埠設置6888 traceroute -p 6888 www.baidu.com
把探測包的個數設置為值4 traceroute -q 4 www.baidu.com
繞過正常的路由表,直接發送到網路相連的主機 traceroute -r www.baidu.com
把對外發探測包的等待響應時間設置為3秒 traceroute -w 3 www.baidu.com
4.tcpdump
根據使用者的定義對網路上的數據包進行截獲的包分析工具。 tcpdump可以將網路中傳送的數據包的“頭”完全截獲下來提供分析。它支持針對網路層、協議、主機、網路或埠的過濾,並提供and、or、not等邏輯語句來幫助你去掉無用的信息。
[root@d_bbszb_web01 ~]# tcpdump -h
tcpdump version 4.1-PRE-CVS_2012_03_26
libpcap version 1.4.0
Usage: tcpdump [-aAdDefIKlLnNOpqRStuUvxX] [ -B size ] [ -c count ][ -C file_size ] [ -E algo:secret ] [ -F file ] [ -G seconds ][ -i interface ] [ -M secret ] [ -r file ]
[ -s snaplen ] [ -T type ] [ -w file ] [ -W filecount ]
[ -y datalinktype ] [ -z command ] [ -Z user ][ expression ]
監視指定網路介面的數據包
tcpdump -i eth1
如果不指定網卡,預設tcpdump只會監視第一個網路介面,一般是eth0,下麵的例子都沒有指定網路介面。監視指定主機的數據包
列印所有進入或離開sundown的數據包.
tcpdump host sundown
也可以指定ip,例如截獲所有210.27.48.1 的主機收到的和發出的所有的數據包
tcpdump host 210.27.48.1
列印helios 與 hot 或者與 ace 之間通信的數據包
tcpdump host helios and ( hot or ace )
截獲主機210.27.48.1 和主機210.27.48.2 或210.27.48.3的通信
tcpdump host 210.27.48.1 and (210.27.48.2 or 210.27.48.3 )
列印ace與任何其他主機之間通信的IP 數據包, 但不包括與helios之間的數據包.
tcpdump ip host ace and not helios
如果想要獲取主機210.27.48.1除了和主機210.27.48.2之外所有主機通信的ip包,使用命令:
tcpdump ip host 210.27.48.1 and ! 210.27.48.2
截獲主機hostname發送的所有數據
tcpdump -i eth0 src host hostname
監視所有送到主機hostname的數據包
tcpdump -i eth0 dst host hostname
監視指定主機和埠的數據包
如果想要獲取主機210.27.48.1接收或發出的telnet包,使用如下命令
tcpdump tcp port 23 and host 210.27.48.1
對本機的udp 123 埠進行監視 123 為ntp的服務埠
tcpdump udp port 123
監視指定網路的數據包
列印本地主機與Berkeley網路上的主機之間的所有通信數據包(nt: ucb-ether, 此處可理解為'Berkeley網路'的網路地址,此表達式最原始的含義可表達為: 列印網路地址為ucb-ether的所有數據包)
tcpdump net ucb-ether
列印所有通過網關snup的ftp數據包(註意, 表達式被單引號括起來了, 這可以防止shell對其中的括弧進行錯誤解析)
tcpdump 'gateway snup and (port ftp or ftp-data)'
列印所有源地址或目標地址是本地主機的IP數據包
(如果本地網路通過網關連到了另一網路, 則另一網路並不能算作本地網路.(nt: 此句翻譯曲折,需補充).localnet 實際使用時要真正替換成本地網路的名字)
tcpdump ip and not net localnet
監視指定協議的數據包
列印TCP會話中的的開始和結束數據包, 並且數據包的源或目的不是本地網路上的主機.(nt: localnet, 實際使用時要真正替換成本地網路的名字))
tcpdump 'tcp[tcpflags] & (tcp-syn|tcp-fin) != 0 and not src and dst net localnet'
列印所有源或目的埠是80, 網路層協議為IPv4, 並且含有數據,而不是SYN,FIN以及ACK-only等不含數據的數據包.(ipv6的版本的表達式可做練習)
tcpdump 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'
使用tcpdump抓取HTTP包
tcpdump -XvvennSs 0 -i eth0 tcp[20:2]=0x4745 or tcp[20:2]=0x4854
0x4745 為"GET"前兩個字母"GE",0x4854 為"HTTP"前兩個字母"HT"。
5.curl
curl是利用URL語法在命令行方式下工作的開源文件傳輸工具。它被廣泛應用在Unix、多種Linux發行版中,並且有DOS和Win32、Win64下的移植版本。
curl命令是一個功能強大的網路工具,它能夠通過http、ftp等方式下載文件,也能夠上傳文件,同時支持HTTPS等眾多協議,還支持POST、cookies、認證、從指定偏移處下載部分文件、用戶代理字元串、限速、文件大小、進度條等特征。其實curl遠不止前面所說的那些功能,大家可以通過man curl閱讀手冊頁獲取更多的信息。類似的工具還有wget。curl命令使用了libcurl庫來實現,libcurl庫常用在C程式中用來處理HTTP請求,curlpp是libcurl的一個C++封裝,這幾個東西可以用在抓取網頁、網路監控等方面的開發,而curl命令可以幫助來解決開發過程中遇到的問題。
常用參數:
-a/--append 上傳文件時,附加到目標文件
-A:隨意指定自己這次訪問所宣稱的自己的瀏覽器信息
-b/--cookie <name=string/file> cookie字元串或文件讀取位置,使用option來把上次的cookie信息追加到http request裡面去。
-c/--cookie-jar
--ignore-content-length 忽略的HTTP頭信息的長度
-i/--include 輸出時包括protocol頭信息
-I/--head 僅返回頭部信息,使用HEAD請求
-k/--insecure 允許不使用證書到SSL站點
-K/--config 指定的配置文件讀取
-l/--list-only 列出ftp目錄下的文件名稱
--limit-rate