Linux网络抓包工具tcpdump
一、tcpdump介紹
tcpdump 是一個Linux的網絡抓包工具。它允許用戶攔截和顯示發送或收到過網絡連接到該計算機的TCP/IP和其他數據包。tcpdump 適用于大多數的類Unix系統操作系統(如linux,BSD等)。
二、安裝&用法說明
2.1、安裝
$ yum -y install tcpdump2.2、用法說明
tcpdump采用命令行方式,它的命令格式為
tcpdump [ -DenNqvX ] [ -c count ] [ -F file ] [ -i interface ] [ -r file ] [ -s snaplen ] [ -w file ] [ expression ]
抓包選項:
- -c:指定要抓取的包數量。注意,是最終要獲取這么多個包。例如,指定"-c 10"將獲取10個包,但可能已經處理了100個包,只不過只有10個包是滿足條件的包。
- -i interface:指定tcpdump需要監聽的接口。若未指定該選項,將從系統接口列表中搜尋編號最小的已配置好的接口(不包括loopback接口,要抓取loopback接口使用tcpdump -i lo),一旦找到第一個符合條件的接口,搜尋馬上結束。可以使用’any’關鍵字表示所有網絡接口。
- -n:對地址以數字方式顯式,否則顯式為主機名,也就是說-n選項不做主機名解析。
- -nn:除了-n的作用外,還把端口顯示為數值,否則顯示端口服務名。
- -N:不打印出host的域名部分。例如tcpdump將會打印’nic’而不是’nic.ddn.mil’。
- -P:指定要抓取的包是流入還是流出的包。可以給定的值為"in"、“out"和"inout”,默認為"inout"。
- -s len:設置tcpdump的數據包抓取長度為len,如果不設置默認將會是65535字節。對于要抓取的數據包較大時,長度設置不夠可能會產生包截斷,若出現包截斷,輸出行中會出現"[|proto]"的標志(proto實際會顯示為協議名)。但是抓取len越長,包的處理時間越長,并且會減少tcpdump可緩存的數據包的數量,從而會導致數據包的丟失,所以在能抓取我們想要的包的前提下,抓取長度越小越好。-s0:防止包截斷。
輸出選項:
- -e:輸出的每行中都將包括數據鏈路層頭部信息。例如源MAC和目標MAC。
- -q:快速打印輸出。即打印很少的協議相關信息,從而輸出行都比較簡短。
- -X:輸出包的頭部數據,會以16進制和ASCII兩種方式同時輸出。
- -A :打印數據報文的 ASCII 值
- -XX:輸出包的頭部數據,會以16進制和ASCII兩種方式同時輸出,更詳細。
- -v:當分析和打印的時候,產生詳細的輸出。
- -vv:產生比-v更詳細的輸出。
- -vvv:產生比-vv更詳細的輸出。
其他功能性選項:
- -D:列出可用于抓包的接口。將會列出接口的數值編號和接口名,它們都可以用于"-i"后。
- -F:從文件中讀取抓包的表達式。若使用該選項,則命令行中給定的其他表達式都將失效。
- -w:將抓包數據輸出到文件中而不是標準輸出。可以同時配合"-G time"選項使得輸出文件每time秒就自動切換到另一個文件。可通過"-r"選項載入這些文件以進行分析和打印。
- -r:從給定的數據包文件中讀取數據。使用"-"表示從標準輸入中讀取。
三種修飾符:
- type:指定ID的類型。
可以給定的值有host/net/port/portrange。例如"host foo",“net 128.3”,“port 20”,“portrange 6000-6008”。默認的type為host。
- dir:指定ID的方向。
可以給定的值包括src/dst/src or dst/src and dst,默認為src or dst。例如,"src foo"表示源主機為foo的數據包,"dst net 128.3"表示目標網絡為128.3的數據包,"src or dst port 22"表示源或目的端口為22的數據包。
- proto:通過給定協議限定匹配的數據包類型。
常用的協議有tcp/udp/arp/ip/ether/icmp等,若未給定協議類型,則匹配所有可能的類型。例如"tcp port 21",“udp portrange 7000-7009”。
三、tcpdump示例
3.1、默認啟動,不帶參數
$ tcpdump默認情況下,直接啟動tcpdump將監視第一個網絡接口(非lo口)上所有流通的數據包。這樣抓取的結果會非常多,滾動非常快。
3.2、tcpdump -D 命令列出可以抓包的網絡接口
$ tcpdump -D
3.4、監視指定網絡接口的數據包
如果不指定網卡,默認tcpdump只會監視第一個網絡接口,如ens33。
3.5、對本機的udp 123端口進行監視(123為ntp的服務端口)
$ tcpdump udp port 1233.6、監視指定網絡的數據包,如本機與192.168網段通信的數據包,"-c 10"表示只抓取10個包
$ tcpdump -c 10 net 192.1683.7、抓取ping包
$ tcpdump -c 5 -nn -i ens33 icmp如果明確要抓取主機為192.168.182.130對本機的ping,則使用and操作符。
$ tcpdump -c 5 -nn -i ens33 icmp and src 192.168.182.130
注意不能直接寫icmp src 192.168.182.130,因為icmp協議不支持直接應用host這個type。
3.9、抓取到本機22端口包
$ tcpdump -c 10 -nn -i bond0 tcp dst port 224.0、解析包數據
$ tcpdump -c 2 -q -XX -vvv -nn -i bond0 tcp dst port 22
4.1、參數只抓取和特定主機相關的數據包
4.2、保存抓包數據
tcpdump 提供了保存抓包數據的功能以便后續分析數據包,也可以利用wireshark等圖形化工具進行分析。
1)使用 -w 選項來保存數據包而不是在屏幕上顯示出抓取的數據包
$ tcpdump -i any -c10 -nn -w webserver.pcap port 22該命令將抓取的數據包保存到文件 webserver.pcap。后綴名 pcap 表示文件是抓取的數據包格式。
2)tcpdump 將數據包保存在二進制文件中,所以不能簡單的用文本編輯器去打開它。使用 -r 選項參數來閱讀該文件中的報文內容
$ tcpdump -nn -r webserver.pcap總結
以上是生活随笔為你收集整理的Linux网络抓包工具tcpdump的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 前端学习(2744):重读vue电商网站
- 下一篇: Linux下网络抓包工具(ngrep)