是一個命令行實用工具,允許你抓取和分析經過系統的流量數據包。它通常被用作于網絡故障分析工具以及安全工具。
創新互聯公司-專業網站定制、快速模板網站建設、高性價比景寧畬族自治網站開發、企業建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式景寧畬族自治網站制作公司更省心,省錢,快速模板網站建設找我們,業務覆蓋景寧畬族自治地區。費用合理售后完善,10余年實體公司更值得信賴。
并且支持多種選項和過濾規則,適用場景十分廣泛。
由于它是命令行工具,因此適用于在遠程服務器或者沒有圖形界面的設備中收集數據包以便于事后分析。
它可以在后臺啟動,也可以用 cron 等定時工具創建定時任務啟用它。
2. 安裝
tcpdump 支持多種 Linux 發行版,所以你的系統中很有可能已經安裝了它。用下面的命令檢查一下是否已經安裝了 tcpdump:
$ which tcpdump
/usr/sbin/tcpdump
1
2
1
2
如果還沒有安裝 tcpdump,你可以用軟件包管理器安裝它。 例如,在 CentOS 或者 Red Hat Enterprise 系統中,用如下命令安裝 tcpdump:
sudo yum install tcpdump
1
1
在ubuntu下安裝:
sudo apt-get install tcpdump
1
1
tcpdump 依賴于 libpcap,該庫文件用于捕獲網絡數據包。如果該庫文件也沒有安裝,系統會根據依賴關系自動安裝它。
安裝完成后就可以抓包了。
3. 抓包
使用 tcpdump 抓包,需要管理員權限,因此下面的示例中絕大多數命令都是以 sudo 開頭。
首先,先用 tcpdump -D 命令列出可以抓包的網絡接口:
$ sudo tcpdump -D
1.eth0
2.virbr0
3.eth1
4.any (Pseudo-device that captures on all interfaces)
5.lo [Loopback]
1
2
3
4
5
6
1
2
3
4
5
6
如上所示,可以看到機器中所有可以抓包的網絡接口。其中特殊接口 any 可用于抓取所有活動的網絡接口的數據包。
我們就用如下命令先對 any 接口進行抓包:
$ sudo tcpdump -i any
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
09:56:18.293641 IP rhel75.localdomain.ssh 192.168.64.1.56322: Flags [P.], seq 3770820720:3770820916, ack 3503648727, win 309, options [nop,nop,TS val 76577898 ecr 510770929], length 196
09:56:18.293794 IP 192.168.64.1.56322 rhel75.localdomain.ssh: Flags [.], ack 196, win 391, options [nop,nop,TS val 510771017 ecr 76577898], length 0
09:56:18.295058 IP rhel75.59883 gateway.domain: 2486+ PTR? 1.64.168.192.in-addr.arpa. (43)
09:56:18.310225 IP gateway.domain rhel75.59883: 2486 NXDomain* 0/1/0 (102)
09:56:18.312482 IP rhel75.49685 gateway.domain: 34242+ PTR? 28.64.168.192.in-addr.arpa. (44)
09:56:18.322425 IP gateway.domain rhel75.49685: 34242 NXDomain* 0/1/0 (103)
09:56:18.323164 IP rhel75.56631 gateway.domain: 29904+ PTR? 1.122.168.192.in-addr.arpa. (44)
09:56:18.323342 IP rhel75.localdomain.ssh 192.168.64.1.56322: Flags [P.], seq 196:584, ack 1, win 309, options [nop,nop,TS val 76577928 ecr 510771017], length 388
09:56:18.323563 IP 192.168.64.1.56322 rhel75.localdomain.ssh: Flags [.], ack 584, win 411, options [nop,nop,TS val 510771047 ecr 76577928], length 0
09:56:18.335569 IP gateway.domain rhel75.56631: 29904 NXDomain* 0/1/0 (103)
09:56:18.336429 IP rhel75.44007 gateway.domain: 61677+ PTR? 98.122.168.192.in-addr.arpa. (45)
09:56:18.336655 IP gateway.domain rhel75.44007: 61677* 1/0/0 PTR rhel75. (65)
09:56:18.337177 IP rhel75.localdomain.ssh 192.168.64.1.56322: Flags [P.], seq 584:1644, ack 1, win 309, options [nop,nop,TS val 76577942 ecr 510771047], length 1060
---- SKIPPING LONG OUTPUT -----
09:56:19.342939 IP 192.168.64.1.56322 rhel75.localdomain.ssh: Flags [.], ack 1752016, win 1444, options [nop,nop,TS val 510772067 ecr 76578948], length 0
^C
9003 packets captured
9010 packets received by filter
7 packets dropped by kernel
$
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
tcpdump 會持續抓包直到收到中斷信號。你可以按 Ctrl+C 來停止抓包。正如上面示例所示,tcpdump 抓取了超過 9000 個數據包。在這個示例中,由于我是通過 ssh 連接到服務器,所以 tcpdump 也捕獲了所有這類數據包。-c 選項可以用于限制 tcpdump 抓包的數量:
$ sudo tcpdump -i any -c 5
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
11:21:30.242740 IP rhel75.localdomain.ssh 192.168.64.1.56322: Flags [P.], seq 3772575680:3772575876, ack 3503651743, win 309, options [nop,nop,TS val 81689848 ecr 515883153], length 196
11:21:30.242906 IP 192.168.64.1.56322 rhel75.localdomain.ssh: Flags [.], ack 196, win 1443, options [nop,nop,TS val 515883235 ecr 81689848], length 0
11:21:30.244442 IP rhel75.43634 gateway.domain: 57680+ PTR? 1.64.168.192.in-addr.arpa. (43)
11:21:30.244829 IP gateway.domain rhel75.43634: 57680 NXDomain 0/0/0 (43)
11:21:30.247048 IP rhel75.33696 gateway.domain: 37429+ PTR? 28.64.168.192.in-addr.arpa. (44)
5 packets captured
12 packets received by filter
0 packets dropped by kernel
$
1
2
3
4
5
6
7
8
9
10
11
12
1
2
3
4
5
6
7
8
9
10
11
12
如上所示,tcpdump 在抓取 5 個數據包后自動停止了抓包。這在有些場景中十分有用 —— 比如你只需要抓取少量的數據包用于分析。當我們需要使用過濾規則抓取特定的數據包(如下所示)時,-c 的作用就十分突出了。
在上面示例中,tcpdump 默認是將 IP 地址和端口號解析為對應的接口名以及服務協議名稱。而通常在網絡故障排查中,使用 IP 地址和端口號更便于分析問題;用 -n 選項顯示 IP 地址,-nn 選項顯示端口號:
$ sudo tcpdump -i any -c5 -nn
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
23:56:24.292206 IP 192.168.64.28.22 192.168.64.1.35110: Flags [P.], seq 166198580:166198776, ack 2414541257, win 309, options [nop,nop,TS val 615664 ecr 540031155], length 196
23:56:24.292357 IP 192.168.64.1.35110 192.168.64.28.22: Flags [.], ack 196, win 1377, options [nop,nop,TS val 540031229 ecr 615664], length 0
23:56:24.292570 IP 192.168.64.28.22 192.168.64.1.35110: Flags [P.], seq 196:568, ack 1, win 309, options [nop,nop,TS val 615664 ecr 540031229], length 372
23:56:24.292655 IP 192.168.64.1.35110 192.168.64.28.22: Flags [.], ack 568, win 1400, options [nop,nop,TS val 540031229 ecr 615664], length 0
23:56:24.292752 IP 192.168.64.28.22 192.168.64.1.35110: Flags [P.], seq 568:908, ack 1, win 309, options [nop,nop,TS val 615664 ecr 540031229], length 340
5 packets captured
6 packets received by filter
0 packets dropped by kernel
1
2
3
4
5
6
7
8
9
10
11
1
2
3
4
5
6
7
8
9
10
11
如上所示,抓取的數據包中顯示 IP 地址和端口號。這樣還可以阻止 tcpdump 發出 DNS 查找,有助于在網絡故障排查中減少數據流量。
現在你已經會抓包了,讓我們來分析一下這些抓包輸出的含義吧。
僅供參考
? 眾所周知,在Windows下開發運行環境下,在調試網絡環境時,可以可以很方便的借助wireshark等軟件進行抓包分析;并且在linux或者Ubuntu等桌面版里也可以進行安裝抓包工具進行抓包分析,但總有一些情況,無法直接運用工具(比如一些沒有界面的linux環境系統中),則此時我們就需要使用到最簡單的tcpdump命令進行網絡抓包。
? 一般的,linux下抓包時,抓取特定的網絡數據包到當前文件夾下的文件中,再把文件拷貝出來利用Windows下的wireshark軟件進行分析。
tcpdump命令詳解:(簡單舉例)
? 1、抓取到的文件為filename.cap,然后將此文件拷貝到Windows下,使用wireshar打開后,即可對此文件進行分析。
? 2、eth0 是主機的網絡適配器名稱,具體的參數值可以在linux命令行窗口中通過 ifconfig 指令查詢。
Linux查看當前路徑命令:
pwd,比較簡單,如果有時在操作過程中忘記了當前路徑,可以通過此命令來查看路徑,執行方式為:pwd /home/samlee
pwd為運行的命令,/home/samlee為運行pwd命令后顯示的信息,即顯示用戶當前所在的工作目錄的路徑為/home/samlee。
我們應該經常使用pwd命令,因為Linux的目錄結構非常復雜,一個小小的分支就可能會有是十幾層目錄,Linux也不會像Windows那樣把全路徑寫在提示符里。
Linux查看路徑的其他命令:
whereis,用來查看一個命令或者文件所在的絕對路徑,而which用來查看當前要執行的命令所在的路徑。
比如你的Linux系統中裝了很多個版本的java,如果你直接在命令行敲命令“java-version”,會得到一個結果,但是你知道在哪個路徑下執行此命令嗎?可以用which命令:which
java。
得到的結果就是系統默認執行的java所在的路徑。如果使用whereis
java,那么你會得到很多結果,因為這個命令把所有包含java(不管是文件還是文件夾)的路徑都列出來了。
網頁名稱:linux實時抓取命令 linux 抓log
網站URL:http://www.2m8n56k.cn/article0/doggeio.html
成都網站建設公司_創新互聯,為您提供Google、App設計、自適應網站、營銷型網站建設、網站內鏈、域名注冊
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:[email protected]。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯