TCPflow:在Linux中分析和調試網絡流量的利器(轉)


TCPflow是一款功能強大的、基於命令行的免費開源工具,用於在Unix之類的系統(如Linux)上分析網絡流量。它可捕獲通過TCP連接接收或傳輸的數據,並存儲在文件中供以后分析,采用的格式便於協議分析和調試。

它實際上是類似tcpdump的工具,因為它處理來自網絡或存儲文件的數據包。它同樣支持tcpdump支持的功能強大的過濾表達式。唯一的區別是,tcpflow讓所有TCP數據包井然有序,並在單獨的文件(每路方向的數據流有一個文件)中組裝每路數據流,供以后分析。

功能特性包括一個高級插件系統,用於解壓縮壓縮的HTTP連接、撤消MIME編碼或調用后期處理的第三方程序等等。

TCPflow有許多使用場景,包括了解網絡數據包流量,還支持執行網絡取證分析和泄露HTTP會話的內容。

如何在Linux系統中安裝TCPflow?

TCPflow可以在主流GNU/Linux發行版的官方代碼倉庫中找到,可以使用軟件包管理器安裝它,如下所示。

  1. $ sudo apt install tcpflow #Debian/Ubuntu  
  2. $ sudo yum install tcpflow #CentOS/RHEL  
  3. $ sudo dnf install tcpflow #Fedora 22+  

安裝TCPflow后,可以用超級用戶權限來運行它,不然使用sudo命令。注意:它可偵聽活動的網絡接口(比如enp0s3)。

  1. $ sudo tcpflow  
  2. tcpflow: listening on enp0s3  

默認情況下,TCPflow將所有捕獲的數據存儲在表單中有名稱的文件中(如果你使用某些選項,比如timestamp,這可能不一樣)。

  1. sourceip.sourceport-destip.destport  
  2. 192.168.043.031.52920-216.058.210.034.00443  

現在不妨列出目錄,看看TCP流量是否已捕獲在任何文件中。

  1. $ ls -1  
  2. total 20  
  3. -rw-r--r--. 1 root root 808 Sep 19 12:49 192.168.043.031.52920-216.058.210.034.00443  
  4. -rw-r--r--. 1 root root 59 Sep 19 12:49 216.058.210.034.00443-192.168.043.031.52920  

如上所述,每路TCP流量存儲在各自的文件中。從上面輸出可以看出,有三個記錄文件(transcript file),這表明TCPflow呈兩個截然不同的方向,源IP在第一個文件中,目的地IP在第二個文件中,反之亦然。

第一個文件192.168.043.031.52920-216.058.210.034.00443含有從主機192.168.043.031(TCPflow運行所在的localhost,通過端口52920)傳輸到主機216.058.210.034(遠程主機,通過端口443)的數據。

而第二個文件216.058.210.034.00443-192.168.043.031.52920含有從主機216.058.210.034(遠程主機,通過端口443)傳輸到主機192.168.043.031(TCPflow運行所在的localhost,通過端口52920)的數據。

還生成了一個XML報告,含有關於該程序的信息,比如它是如何編譯的、它在哪台計算機上運行以及每條TCP連接的記錄。

你可能注意到了,TCPflow默認情況下將記錄文件存儲在當前目錄下。-o選項可幫助你指定將寫入文件的輸出目錄。

  1. $ sudo tcpflow -o tcpflow_files  
  2. $ sudo ls -l tcpflow_files  
  3. total 32  
  4. -rw-r--r--. 1 root root 1665 Sep 19 12:56 157.240.016.035.00443-192.168.000.103.45986  
  5. -rw-r--r--. 1 root root 45 Sep 19 12:56 169.044.082.101.00443-192.168.000.103.55496  
  6. -rw-r--r--. 1 root root 2738 Sep 19 12:56 172.217.166.046.00443-192.168.000.103.39954  
  7. -rw-r--r--. 1 root root 68 Sep 19 12:56 192.168.000.102.00022-192.168.000.103.42436  
  8. -rw-r--r--. 1 root root 573 Sep 19 12:56 192.168.000.103.39954-172.217.166.046.00443  
  9. -rw-r--r--. 1 root root 4067 Sep 19 12:56 192.168.000.103.45986-157.240.016.035.00443  
  10. -rw-r--r--. 1 root root 38 Sep 19 12:56 192.168.000.103.55496-169.044.082.101.00443  
  11. -rw-r--r--. 1 root root 3159 Sep 19 12:56 report.xml  

你還可以將數據包的內容輸出到stdout,並不將任何捕獲的數據存儲到文件,只需使用-c標志,如下所示。

想有效地進行測試,打開第二個端口,運行ping,或瀏覽互聯網。你應該能夠看到ping細節或瀏覽細節已被TCPflow捕獲。

  1. $ sudo tcpflow -c 

可以捕獲某個端口上的所有流量,比如端口80(HTTP)。以HTTP流量為例,你可以看到HTTP Headers以及隨后的內容都在stdout上;如果去除-c參數選項符,它們都在一個文件中。

  1. $ sudo tcpflow port 80 

想捕獲來自某個網絡接口的數據包,使用-i標志來指定接口名稱。

  1. $ sudo tcpflow -i eth0 port 80 

還可以指定目標主機(接受的值是IP地址、主機名或域名),如下所示:

  1. $ sudo tcpflow -c host 192.68.43.1 

OR

  1. $ sudo tcpflow -c host www.google.com 

你可以使用-a標志,啟用使用所有瀏覽器的所有處理,這相當於-e all參數選項符。

  1. $ sudo tcpflow -a 

OR

  1. $ sudo tcpflow -e all 

還可以激活特定的掃描器;可用的掃描器包括md5、http、netviz、tcpdemux和wifiviz(運行tcpflow –H,即可查看關於每個掃描器的詳細信息)。

  1. $ sudo tcpflow -e http 

OR

  1. $ sudo tcpflow -e md5 

OR

  1. $ sudo tcpflow -e netviz 

OR

  1. $ sudo tcpflow -e tcpdemux 

OR

  1. $ sudo tcpflow -e wifiviz 

下面這個例子顯示了如何啟用除tcpdemux之外的所有掃描器。

  1. $ sudo tcpflow -a -x tcpdemux 

TCPflow通常在捕獲數據包之前試圖讓網絡接口處於混雜模式。可以使用-p標志來阻止這種模式,如下所示:

  1. $ sudo tcpflow -p -i eth0 

想讀取來自tcpdump pcap文件的數據包,使用-r標志。

  1. $ sudo tcpflow -f file.pcap 

可以使用-v或-d 10選項啟用詳細模式。

  1. $ sudo tcpflow -v 

OR

  1. $ sudo tcpflow -d 10 

重要提醒:TCPflow的一個局限性是,目前它不了解IP片段,因而可能無法正確捕獲作為TCP連接的一部分而傳輸的含有IP片段的數據。

想了解更多信息和用法選項,請參閱TCPflow參考手冊頁。

  1. $ man tcpflow 

TCPflow Github代碼倉庫:https://github.com/simsong/tcpflow

就是這樣!TCPflow是一款功能強大的TCP流量記錄器,適用於了解網絡數據包流量、執行網絡取證分析等等。試用一下,歡迎交流心得。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM