linux tcpdump 抓包

tcpdump是linux命令行下經常使用的的一個抓包工具,記錄一下平時經常使用的方式,測試機器系統是ubuntu 12.04。linux

tcpdump的命令格式web

tcpdump的參數衆多,經過man tcpdump能夠查看tcpdump的詳細說明,這邊只列一些筆者本身經常使用的參數:ubuntu

tcpdump [-i 網卡] -nnAX '表達式'

各參數說明以下:app

  • -i:interface 監聽的網卡。
  • -nn:表示以ip和port的方式顯示來源主機和目的主機,而不是用主機名和服務。
  • -A:以ascii的方式顯示數據包,抓取web數據時頗有用。
  • -X:數據包將會以16進制和ascii的方式顯示。
  • 表達式:表達式有不少種,常見的有:host 主機;port 端口;src host 發包主機;dst host 收包主機。多個條件能夠用and、or組合,取反可使用!,更多的使用能夠查看man 7 pcap-filter。

下面進行一些命令測試,若是沒有權限,能夠先切換成root用戶。tcp

監聽網卡eth0工具

$ tcpdump -i eth0

這個方式最簡單了,可是用處很少,由於基本上只能看到數據包的信息刷屏,壓根看不清,可使用ctrl+c中斷退出,若是真有需求,能夠將輸出內容重定向到一個文件,這樣也更方便查看。測試

監聽指定協議的數據命令行

$ tcpdump -i eth0 -nn 'icmp'

這個是用來監聽icmp協議的數據,就是ping命令使用的協議。相似的,若是要監聽tcp或者是udp協議,只須要修改上例的icmp就能夠了。ping下監聽的機器,輸出以下:cdn

linux使用tcpdump抓包示例

linux使用tcpdump抓包示例blog

每一行的各個數據表示的含義:

抓到包的時間 IP 發包的主機和端口 > 接收的主機和端口 數據包內容

監聽指定的主機

$ tcpdump -i eth0 -nn 'host 192.168.1.231'

這樣的話,192.168.1.231這臺主機接收到的包和發送的包都會被抓取。

$ tcpdump -i eth0 -nn 'src host 192.168.1.231'

這樣只有192.168.1.231這臺主機發送的包纔會被抓取。

$ tcpdump -i eth0 -nn 'dst host 192.168.1.231'

這樣只有192.168.1.231這臺主機接收到的包纔會被抓取。

監聽指定端口

$ tcpdump -i eth0 -nnA 'port 80'

上例是用來監聽主機的80端口收到和發送的全部數據包,結合-A參數,在web開發中,真是很是有用。

監聽指定主機和端口

$ tcpdump -i eth0 -nnA 'port 80 and src host 192.168.1.231'

多個條件能夠用and,or鏈接。上例表示監聽192.168.1.231主機經過80端口發送的數據包。

監聽除某個端口外的其它端口

$ tcpdump -i eth0 -nnA '!port 22'

若是須要排除某個端口或者主機,可使用「!」符號,上例表示監聽非22端口的數據包。

 

轉自:http://www.01happy.com/linux-use-tcpdump-capture-network-packets/

相關文章
相關標籤/搜索