tcpdump 是一款靈活、功能強(qiáng)大的抓包工具,能有效地幫助排查網(wǎng)絡(luò)故障問(wèn)題。
以我作為管理員的經(jīng)驗(yàn),在網(wǎng)絡(luò)連接中經(jīng)常遇到十分難以排查的故障問(wèn)題。對(duì)于這類情況,tcpdump 便能派上用場(chǎng)。
tcpdump 是一個(gè)命令行實(shí)用工具,允許你抓取和分析經(jīng)過(guò)系統(tǒng)的流量數(shù)據(jù)包。它通常被用作于網(wǎng)絡(luò)故障分析工具以及安全工具。
tcpdump 是一款強(qiáng)大的工具,支持多種選項(xiàng)和過(guò)濾規(guī)則,適用場(chǎng)景十分廣泛。由于它是命令行工具,因此適用于在遠(yuǎn)程服務(wù)器或者沒(méi)有圖形界面的設(shè)備中收集數(shù)據(jù)包以便于事后分析。它可以在后臺(tái)啟動(dòng),也可以用 cron 等定時(shí)工具創(chuàng)建定時(shí)任務(wù)啟用它。
本文中,我們將討論 tcpdump 最常用的一些功能。
tcpdump 支持多種 Linux 發(fā)行版,所以你的系統(tǒng)中很有可能已經(jīng)安裝了它。用下面的命令檢查一下是否已經(jīng)安裝了 tcpdump:
$ which tcpdump
/usr/sbin/tcpdump
如果還沒(méi)有安裝 tcpdump,你可以用軟件包管理器安裝它。 例如,在 CentOS 或者 Red Hat Enterprise 系統(tǒng)中,用如下命令安裝 tcpdump:
$ sudo yum install -y tcpdump
tcpdump 依賴于 libpcap,該庫(kù)文件用于捕獲網(wǎng)絡(luò)數(shù)據(jù)包。如果該庫(kù)文件也沒(méi)有安裝,系統(tǒng)會(huì)根據(jù)依賴關(guān)系自動(dòng)安裝它。
現(xiàn)在你可以開(kāi)始抓包了。
使用 tcpdump 抓包,需要管理員權(quán)限,因此下面的示例中絕大多數(shù)命令都是以 sudo 開(kāi)頭。
首先,先用 tcpdump -D 命令列出可以抓包的網(wǎng)絡(luò)接口:
$ sudo tcpdump -D
1.eth0
2.virbr0
3.eth1
4.any (Pseudo-device that captures on all interfaces)
5.lo [Loopback]
還有水滴的第二種破解方式,如果我們用第一種硬破的方式破解不出來(lái),那么可以嘗試這種方法,也就是抓包跑包,抓包和跑包是兩個(gè)過(guò)程,抓包的意思就是 當(dāng)別人正在上網(wǎng)的時(shí)候我們用水滴抓取別人在上網(wǎng)過(guò)程中進(jìn)行數(shù)據(jù)傳輸?shù)臄?shù)據(jù)包,在這個(gè)數(shù)據(jù)包里面就包含了很多的信息,其中就包括路由器的密碼,但是這個(gè)密碼也是需要進(jìn)行暴力破解的。所以如果我們想要抓取所處無(wú)線網(wǎng)絡(luò)環(huán)境下所有的包的時(shí)候,需要給機(jī)器配備一種特殊的設(shè)備(sniffer就是嗅探器),然后再通過(guò)抓包工具抓取并分析。如果抓包所在網(wǎng)絡(luò)接口的網(wǎng)絡(luò)掩碼不合法, 或者此接口根本就沒(méi)有設(shè)置相應(yīng)網(wǎng)絡(luò)地址和網(wǎng)絡(luò), 亦或是在linux下的'any'網(wǎng)絡(luò)接口上抓包(此'any'接口可以收到系統(tǒng)中不止一個(gè)接口的數(shù)據(jù)包(nt: 實(shí)際上, 可理解為系統(tǒng)中所有可用的接口)),網(wǎng)絡(luò)掩碼的檢查不能正常進(jìn)行.。
我們就用如下命令先對(duì) any 接口進(jìn)行抓包:
$ 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
$