libpcaplinux
① 如何在linux下統計高速網路中的流量
Linux下統計高速網路流量方法如下:
在Linux中有很多的流量監控工具,它們可以監控、分類網路流量,以花哨的圖形用戶界面提供實時流量分析報告。大多數這些工具(例如:ntopng,iftop )都是基於libpcap 庫的,這個函數庫是用來截取流經網卡的數據包的,可在用戶空間用來監視分析網路流量。盡管這些工具功能齊全,然而基於libpcap庫的流量監控工具無法處理高速(Gb以上)的網路介面,原因是由於在用戶空間做數據包截取的系統開銷過高所致。
在本文中我們介紹一種簡單的Shell 腳本,它可以監控網路流量而且不依賴於緩慢的libpcap庫。這些腳本支持Gb以上規模的高速網路介面,如果你對「匯聚型」的網路流量感興趣的話,它們可統計每個網路介面上的流量。
腳本主要是基於sysfs虛擬文件系統,這是由內核用來將設備或驅動相關的信息輸出到用戶空間的一種機制。網路介面的相關分析數據會通過「/sys/class/net/<ethX>/statistics」輸出。
舉個例子,eth0的網口上分析報告會輸出到這些文件中:
/sys/class/net/eth0/statistics/rx_packets: 收到的數據包數據
/sys/class/net/eth0/statistics/tx_packets: 傳輸的數據包數量
/sys/class/net/eth0/statistics/rx_bytes: 接收的位元組數
/sys/class/net/eth0/statistics/tx_bytes: 傳輸的位元組數
/sys/class/net/eth0/statistics/rx_dropped: 收包時丟棄的數據包
/sys/class/net/eth0/statistics/tx_dropped: 發包時丟棄的數據包
這些數據會根據內核數據發生變更的時候自動刷新。因此,你可以編寫一系列的腳本進行分析並計算流量統計。下面就是這樣的腳本(感謝 joemiller 提供)。第一個腳本是統計每秒數據量,包含接收(RX)或發送(TX)。而後面的則是一個描述網路傳輸中的接收(RX)發送(TX)帶寬。這些腳本中安裝不需要任何的工具。
測量網口每秒數據包:
#!/bin/bash
INTERVAL="1" #update interval in seconds
if [ -z "$1" ]; then
echo
echousage: $0 [network-interface]
echo
echoe.g. $0 eth0
echo
echoshows packets-per-second
exit
fi
IF=$1
while true
do
R1=`cat/sys/class/net/$1/statistics/rx_packets`
T1=`cat/sys/class/net/$1/statistics/tx_packets`
sleep$INTERVAL
R2=`cat/sys/class/net/$1/statistics/rx_packets`
T2=`cat/sys/class/net/$1/statistics/tx_packets`
TXPPS=`expr$T2 - $T1`
RXPPS=`expr$R2 - $R1`
echo"TX $1: $TXPPS pkts/s RX $1: $RXPPS pkts/s"
done
網路帶寬測量
#!/bin/bash
INTERVAL="1" #update interval in seconds
if [ -z"$1" ]; then
echo
echousage: $0 [network-interface]
echo
echoe.g. $0 eth0
echo
exit
fi
IF=$1
while true
do
R1=`cat/sys/class/net/$1/statistics/rx_bytes`
T1=`cat/sys/class/net/$1/statistics/tx_bytes`
sleep$INTERVAL
R2=`cat/sys/class/net/$1/statistics/rx_bytes`
T2=`cat/sys/class/net/$1/statistics/tx_bytes`
TBPS=`expr$T2 - $T1`
RBPS=`expr$R2 - $R1`
TKBPS=`expr$TBPS / 1024`
RKBPS=`expr$RBPS / 1024`
echo"TX $1: $TKBPS kb/s RX $1: $RKBPS kb/s"
done
下面的屏幕截圖顯示了上面的兩個腳本的輸出。
② linux系統怎麼安裝wireshark
首先安裝tcpmp需要先安裝libpcap,把我們下載到的tcpmp以及libpcap安裝包放在linux一個目錄下面,然後我們使用cd進入該目錄後執行libpcap的解壓操作。如下圖2-2-1,2-2-2所示:
解壓完畢後的;libpca目錄如下圖2-2-3所示:
我們進入到該目錄,然後執行./configure然後執行make&make install就開始安裝了;安裝完畢後的正常狀態如下圖2-2-4所示:
然後我們進入到tcpmp文件的存放目錄,再次執行解壓操作;如下圖2-2-5,2-2-6所示:
進入到tcpmp目錄下後我們一樣執行./configure,完畢後我們再次執行:make&make install;安裝完畢後我們就可以使用該軟體了;如下圖2-2-7,2-2-8所示:
③ linux抓包命令
linux系統下抓包命令是tcpmp。以下是對tcpmp命令的詳細介紹:
1. tcpmp命令簡介 tcpmp是一個運行在命令行下的抓包工具。 它允許用戶攔截和顯示發送或收到過網路連接到該計算機的TCP/IP和其他數據包。 tcpmp適用於大多數的類Unix系統操作系統,需要使用libpcap這個捕捉數據的庫。
2. tcpmp命令的形式 tcpmp命令的基本格式為:tcpmp [選項] [表達式]。 例如:tcpmp –i eth0 'port 1111' X c 3,其中i eth0指定網路介面,'port 1111'指定埠號,X表示以16進制和ASCII形式顯示協議頭和包內容,c 3表示只抓取3個數據包。
3. tcpmp命令的常用選項 a:將網路地址和廣播地址轉變成名字。 d:將匹配信息包的代碼以匯編格式給出。 dd:將匹配信息包的代碼以c語言程序段格式給出。 ddd:將匹配信息包的代碼以十進制形式給出。 e:在輸出行列印出數據鏈路層的頭部信息,包括源mac和目的mac,以及網路層的協議。 f:將外部的Internet地址以數字的形式列印出來。 l:使標准輸出變為緩沖行形式。 n:指定將每個監聽到數據包中的域名轉換成IP地址後顯示。 nn:指定將每個監聽到的數據包中的域名轉換成IP、埠從應用名稱轉換成埠號後顯示。 t:在輸出的每一行不列印時間戳。 v:輸出稍微詳細的信息。 vv:輸出詳細的報文信息。 c:在收到指定的包的數目後,tcpmp就會停止。 F:從指定的文件中讀取表達式,忽略其它的表達式。 i:指定監聽的網路介面。 p:將網卡設置為非混雜模式,不能與host或broadcast一起使用。 r:從指定的文件中讀取包。 w:直接將包寫入文件中,並不分析和列印出來。 s snaplen:snaplen表示從一個包中截取的位元組數。0表示包不截斷,抓完整的數據包。默認只顯示部分數據包,默認68位元組。 T:將監聽到的包直接解釋為指定的類型的報文,常見的類型有rpc和snmp。 X:以16進制和ASCII的形式顯示協議頭和包內容,是協議分析的利器。