這里收集了一些實用的tcpdump使用示例,使用它們可提升您的網絡故障排除和安全測試能力。
熟練掌握下面的tcpdump使用示例,可以幫助我們更好的了解自己的網絡。
了解tcpdump是一項基本技能,不僅對于系統(tǒng)管理員、網絡工程師或安全專業(yè)人員,
對于自己部署玩的一些服務器來說,也會派上用場。
基礎知識
常用參數
下面的命令是使用tcpdump時常見的參數。
$ sudo tcpdump -i eth0 -nn -s0 -v port 80
-i:進行抓包的接口,通常是以太網卡或無線適配器,但也可能是vlan或其它東西。
如果只有一個網絡適配器,不用指定也行。
-nn:單個 (n) 不會解析主機名。兩個 (nn) 不會解析主機名或端口。
這不僅對于查看 IP/端口號很方便,而且在抓包大量數據時也很方便,因為名稱解析會減慢抓包速度。
-s0:抓包大小。-s0 會將大小設置為無限制 。
如果您想抓包所有流量,或者從網絡流量中提取二進制文件/文件,則需要此選項。
-v:詳細,使用 (-v) 或 (-vv) 會增加輸出中顯示更詳細信息,通常會顯示更多協議特定的信息。
port 80:端口過濾器,這里設置的是抓包端口 80 上的流量。
顯示 ASCII 文本
-A參數使得輸出中包含抓包的ascii字符串。
這樣便于結合grep或其他命令解析輸出。
另一個可以同時顯示十六進制輸出和ascii的參數是-X。
$ sudo tcpdump -A -s0 port 80
根據協議抓包
比如,過濾 UDP 流量,可以指定udp,也可以指定使用協議17,這兩個命令效果一樣。
TCP對應的協議是 6。
$ sudo tcpdump -i eth0 udp $ sudo tcpdump -i eth0 proto 17
根據 IP 抓包
使用host過濾器將同時抓包前往(目標)和來自(源)IP 地址的流量。
$ sudo tcpdump -i eth0 host 10.10.1.1
或者使用src或dst僅抓包單向流量。
$ sudo tcpdump -i eth0 src 10.10.1.20 $ sudo tcpdump -i eth0 dst 10.10.1.20
抓包內容寫入文件
將抓包文件寫入磁盤,這樣就可以用其它工具,比如 Wireshark 來分析。
$ sudo tcpdump -i eth0 -s0 -w test.pcap
行緩沖模式
指定緩沖模式,比如行緩沖(-l)或數據包緩沖(-C),可以讓tcpdump的輸出立即發(fā)送到管道命令,在故障排除時立即做出響應。
$ sudo tcpdump -i eth0 -s0 -l port 80 | grep 'Server:'
不指定緩沖模式,有可能會得不到預期的結果。
組合過濾器
在上面的示例中,可以使用使用下面的邏輯符號來組合不同的過濾器。
and or && or or || not or !
使用示例
Tcpdump命令參數很多,常常有多種方法可以實現同樣的結果。
使用哪種方法取決于所需的輸出以及線路上的流量。比如,在繁忙的千兆位鏈路上進行抓包可能會迫使您使用特定的低級數據包過濾器。
下面的示例中,將列舉一些以最簡單(因此最快)的方式獲得結果的方法。
提取 HTTP 用戶代理
從 HTTP 請求標頭中提取 HTTP 用戶代理。
$ sudo tcpdump -nn -A -s1500 -l | grep "User-Agent:"
通過使用egrep和多個匹配規(guī)則,可以從請求中獲取用戶代理和主機(或任何其他標頭)。
$ sudo tcpdump -nn -A -s1500 -l | egrep -i 'User-Agent:|Host:'
僅捕獲 HTTP GET 和 POST 數據包
僅指定與GET匹配的數據包。
$ sudo tcpdump -s 0 -A -vv 'tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420'
只選擇POST請求。
$ sudo tcpdump -s 0 -A -vv 'tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x504f5354'
注意,使用此過濾器抓包的數據中可能不包含POST 數據,因為POST請求很可能會被拆分為多個TCP數據包。
上面的表達式中的十六進制是與GET和POST請求中的ascii對應的。
提取 HTTP 請求的 URL
從流量中解析主機和HTTP請求位置。
如果服務不在80 端口,則需要指定端口。
$ sudo tcpdump -s 0 -v -n -l | egrep -i "POST /|GET /|Host:" tcpdump: listening on enp7s0, link-type EN10MB (Ethernet), capture size 262144 bytes POST /wp-login.php HTTP/1.1 Host: dev.example.com GET /wp-login.php HTTP/1.1 Host: dev.example.com GET /favicon.ico HTTP/1.1 Host: dev.example.com GET / HTTP/1.1 Host: dev.example.com
在 POST 請求中提取 HTTP 密碼
$ sudo tcpdump -s 0 -A -n -l | egrep -i "POST /|pwd=|passwd=|password=|Host:" tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on enp7s0, link-type EN10MB (Ethernet), capture size 262144 bytes 1154.799014 IP 10.10.1.30.39224 > 10.10.1.125.80: Flags [P.], seq 1458768667:1458770008, ack 2440130792, win 704, options [nop,nop,TS val 461552632 ecr 208900561], length 1341: HTTP: POST /wp-login.php HTTP/1.1 .....s..POST /wp-login.php HTTP/1.1 Host: dev.example.com .....s..log=admin&pwd=notmypassword&wp-submit=Log+In&redirect_to=http%3A%2F%2Fdev.example.com%2Fwp-admin%2F&testcookie=1
從服務器和客戶端抓包 Cookie
通過搜索Set-Cookie(來自服務器)和Cookie(來自客戶端)來抓包cookie。
$ sudo tcpdump -nn -A -s0 -l | egrep -i 'Set-Cookie|Host:|Cookie:' tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on wlp58s0, link-type EN10MB (Ethernet), capture size 262144 bytes Host: dev.example.com Cookie: wordpress_86be02xxxxxxxxxxxxxxxxxxxc43=admin%7C152xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxfb3e15c744fdd6; _ga=GA1.2.21343434343421934; _gid=GA1.2.927343434349426; wordpress_test_cookie=WP+Cookie+check; wordpress_logged_in_86be654654645645645654645653fc43=admin%7C15275102testtesttesttestab7a61e; wp-settings-time-1=1527337439
抓包所有 ICMP 數據包
$ sudo tcpdump -n icmp tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on enp7s0, link-type EN10MB (Ethernet), capture size 262144 bytes 1121.590380 IP 10.10.1.217 > 10.10.1.30: ICMP echo request, id 27948, seq 1, length 64 1121.590434 IP 10.10.1.30 > 10.10.1.217: ICMP echo reply, id 27948, seq 1, length 64 1127.680307 IP 10.10.1.159 > 10.10.1.1: ICMP 10.10.1.189 udp port 59619 unreachable, length 115
非 ECHO/REPLY 的 ICMP 數據包
對icmp類型進行過濾,以選擇非標準ping包的icmp包。
$ sudo tcpdump 'icmp[icmptype] != icmp-echo and icmp[icmptype] != icmp-echoreply' tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on enp7s0, link-type EN10MB (Ethernet), capture size 262144 bytes 1104.041037 IP 10.10.1.189 > 10.10.1.20: ICMP 10.10.1.189 udp port 36078 unreachable, length 156
抓包 SMTP/POP3 電子郵件
可以提取電子郵件正文和其他數據,下面的例子中僅解析電子郵件收件人。
$ sudo tcpdump -nn -l port 25 | grep -i 'MAIL FROM|RCPT TO'
NTP 的查詢和響應的故障排除
$ sudo tcpdump dst port 123 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes 2119.112502 IP test33.ntp > 199.30.140.74.ntp: NTPv4, Client, length 48 2119.113888 IP 216.239.35.0.ntp > test33.ntp: NTPv4, Server, length 48 2120.150347 IP test33.ntp > 216.239.35.0.ntp: NTPv4, Client, length 48 2120.150991 IP 216.239.35.0.ntp > test33.ntp: NTPv4, Server, length 48
抓包 SNMP 的查詢和響應
使用onesixtyone快速SNMP協議掃描器,然后在本地網絡上測試SNMP服務并捕獲GetRequest和GetResponse。
模擬SNMP掃描:
$ onesixtyone 10.10.1.10 public Scanning 1 hosts, 1 communities 10.10.1.10 [public] Linux test33 4.15.0-20-generic #21-Ubuntu SMP Tue Apr 24 0615 UTC 2018 x86_64
抓包SNMP查詢和掃描:
$ sudo tcpdump -n -s0 port 161 and udp tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on wlp58s0, link-type EN10MB (Ethernet), capture size 262144 bytes 2313.725522 IP 10.10.1.159.36826 > 10.10.1.20.161: GetRequest(28) .1.3.6.1.2.1.1.1.0 2313.728789 IP 10.10.1.20.161 > 10.10.1.159.36826: GetResponse(109) .1.3.6.1.2.1.1.1.0="Linux testmachine 4.15.0-20-generic #21-Ubuntu SMP Tue Apr 24 0615 UTC 2018 x86_64"
抓包 FTP 的憑證和命令
$ sudo tcpdump -nn -v port ftp or ftp-data
滾動抓包文件
針對大流量或長時間抓包時,自動創(chuàng)建固定大小的新文件會很有幫助,一般使用參數-W、-G和-C來完成。
下面的示例中,文件capture-(hour).pcap將每 (-G)3600秒(1 小時)創(chuàng)建一次,這些文件將在第二天被覆蓋。
因此,最終應該得到capture-{1-24}.pcap,如果小時為15,則新文件為 (/tmp/capture-15.pcap)。
$ tcpdump -w /tmp/capture-%H.pcap -G 3600 -C 200
抓包 IPv6 流量
使用ip6過濾器捕獲IPv6流量。
可以使用proto 6或proto 17指定了TCP或UDP協議。
tcpdump -nn ip6 proto 6
從先前保存的抓包文件中讀取UDP的IPv6流量。
tcpdump -nr ipv6-test.pcap ip6 proto 17
檢測網絡流量中的端口掃描
$ tcpdump -nn 2119.693601 IP 10.10.1.10.60460 > 10.10.1.199.5432: Flags [S], seq 116466344, win 29200, options [mss 1460,sackOK,TS val 3547090332 ecr 0,nop,wscale 7], length 0 2119.693626 IP 10.10.1.10.35470 > 10.10.1.199.513: Flags [S], seq 3400074709, win 29200, options [mss 1460,sackOK,TS val 3547090332 ecr 0,nop,wscale 7], length 0 2119.693762 IP 10.10.1.10.44244 > 10.10.1.199.389: Flags [S], seq 2214070267, win 29200, options [mss 1460,sackOK,TS val 3547090333 ecr 0,nop,wscale 7], length 0 2119.693772 IP 10.10.1.199.389 > 10.10.1.10.44244: Flags [R.], seq 0, ack 2214070268, win 0, length 0 2119.693783 IP 10.10.1.10.35172 > 10.10.1.199.1433: Flags [S], seq 2358257571, win 29200, options [mss 1460,sackOK,TS val 3547090333 ecr 0,nop,wscale 7], length 0 2119.693826 IP 10.10.1.10.33022 > 10.10.1.199.49153: Flags [S], seq 2406028551, win 29200, options [mss 1460,sackOK,TS val 3547090333 ecr 0,nop,wscale 7], length 0 2119.695567 IP 10.10.1.10.55130 > 10.10.1.199.49154: Flags [S], seq 3230403372, win 29200, options [mss 1460,sackOK,TS val 3547090334 ecr 0,nop,wscale 7], length 0 2119.695590 IP 10.10.1.199.49154 > 10.10.1.10.55130: Flags [R.], seq 0, ack 3230403373, win 0, length 0 2119.695608 IP 10.10.1.10.33460 > 10.10.1.199.49152: Flags [S], seq 3289070068, win 29200, options [mss 1460,sackOK,TS val 3547090335 ecr 0,nop,wscale 7], length 0 2119.695622 IP 10.10.1.199.49152 > 10.10.1.10.33460: Flags [R.], seq 0, ack 3289070069, win 0, length 0 2119.695637 IP 10.10.1.10.34940 > 10.10.1.199.1029: Flags [S], seq 140319147, win 29200, options [mss 1460,sackOK,TS val 3547090335 ecr 0,nop,wscale 7], length 0 2119.695650 IP 10.10.1.199.1029 > 10.10.1.10.34940: Flags [R.], seq 0, ack 140319148, win 0, length 0 2119.695664 IP 10.10.1.10.45648 > 10.10.1.199.5060: Flags [S], seq 2203629201, win 29200, options [mss 1460,sackOK,TS val 3547090335 ecr 0,nop,wscale 7], length 0 2119.695775 IP 10.10.1.10.49028 > 10.10.1.199.2000: Flags [S], seq 635990431, win 29200, options [mss 1460,sackOK,TS val 3547090335 ecr 0,nop,wscale 7], length 0 2119.695790 IP 10.10.1.199.2000 > 10.10.1.10.49028: Flags [R.], seq 0, ack 635990432, win 0, length 0
顯示 Nmap NSE 腳本測試的示例過濾器
在Nmap機器上模擬NSE腳本:
$ nmap -p 80 --script=http-enum.nse targetip
在目標機器上抓包:
$ tcpdump -nn port 80 | grep "GET /" GET /w3perl/ HTTP/1.1 GET /w-agora/ HTTP/1.1 GET /way-board/ HTTP/1.1 GET /web800fo/ HTTP/1.1 GET /webaccess/ HTTP/1.1 GET /webadmin/ HTTP/1.1 GET /webAdmin/ HTTP/1.1
抓包非本地主機上的開始和結束的數據包
通過選擇tcp-syn和tcp-fin數據包,可以顯示每個已建立的 TCP 會話,其中包含時間戳,但不包含數據。
$ tcpdump 'tcp[tcpflags] & (tcp-syn|tcp-fin) != 0 and not src and dst net localnet'
抓包 DNS 請求和響應
比如下面的示例中可以看到對Google公共DNS的出站DNS請求和A 記錄(IP 地址)響應。
$ sudo tcpdump -i wlp58s0 -s0 port 53 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on wlp58s0, link-type EN10MB (Ethernet), capture size 262144 bytes 1406.879799 IP test.53852 > google-public-dns-a.google.com.domain: 26977+ [1au] A? play.google.com. (44) 1407.022618 IP google-public-dns-a.google.com.domain > test.53852: 26977 1/0/1 A 216.58.203.110 (60)
抓包 HTTP 數據包
僅抓包端口 80上的 HTTP 流量,避免抓包TCP會話 (SYN / FIN / ACK)。
$ tcpdump 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'
在 tcpdump 中抓包,在 Wireshark 中查看
一般方法是通過tcpdump抓包之后保存成文件,再將文件拷貝到Wireshark中查看。
不過,除此之外,還可以通過SSH連接將抓包的內容實時提供給Wireshark。
不要忘記not port 22,加上這個就不會捕獲SSH流量了。
$ ssh root@remotesystem 'tcpdump -s0 -c 1000 -nn -w - not port 22' | wireshark -k -i -
按數據包數量排名主機
列出一段時間內或數據包數量最多的通話者。
使用簡單的命令行字段提取來獲取IP 地址,對出現的次數進行排序和計數。
用于排序和計數的流量與計數參數-c相關。
$ sudo tcpdump -nnn -t -c 200 | cut -f 1,2,3,4 -d '.' | sort | uniq -c | sort -nr | head -n 20 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on enp7s0, link-type EN10MB (Ethernet), capture size 262144 bytes 200 packets captured 261 packets received by filter 0 packets dropped by kernel 108 IP 10.10.211.181 91 IP 10.10.1.30 1 IP 10.10.1.50
抓包 所有明文密碼
下面的示例中,重點關注標準純文本協議,并選擇grep處理任何與用戶或密碼相關的內容。
通過grep的-B5選項,只獲取前 5 行(可以提供有關的密碼的上下文、主機名、IP 地址、系統(tǒng))。
$ sudo tcpdump port http or port ftp or port smtp or port imap or port pop3 or port telnet -l -A | egrep -i -B5 'pass=|pwd=|log=|login=|user=|username=|pw=|passw=|passwd=|password=|pass:|user:|username:|password:|login:|pass |user '
DHCP 示例
監(jiān)視DHCP請求和回復,DHCP請求在端口67上顯示,回復在端口68上顯示。
使用參數 -v 可以查看協議選項和其他詳細信息。
$ sudo tcpdump -v -n port 67 or 68 tcpdump: listening on enp7s0, link-type EN10MB (Ethernet), capture size 262144 bytes 1450.059662 IP (tos 0x10, ttl 128, id 0, offset 0, flags [none], proto UDP (17), length 328) 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00xxxx:d5, length 300, xid 0xc9779c2a, Flags [none] Client-Ethernet-Address 00xxxx:d5 Vendor-rfc1048 Extensions Magic Cookie 0x63825363 DHCP-Message Option 53, length 1: Request Requested-IP Option 50, length 4: 10.10.1.163 Hostname Option 12, length 14: "test-ubuntu" Parameter-Request Option 55, length 16: Subnet-Mask, BR, Time-Zone, Default-Gateway Domain-Name, Domain-Name-Server, Option 119, Hostname Netbios-Name-Server, Netbios-Scope, MTU, Classless-Static-Route NTP, Classless-Static-Route-Microsoft, Static-Route, Option 252 1450.059667 IP (tos 0x10, ttl 128, id 0, offset 0, flags [none], proto UDP (17), length 328) 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00xxxx:d5, length 300, xid 0xc9779c2a, Flags [none] Client-Ethernet-Address 00xxxx:d5 Vendor-rfc1048 Extensions Magic Cookie 0x63825363 DHCP-Message Option 53, length 1: Request Requested-IP Option 50, length 4: 10.10.1.163 Hostname Option 12, length 14: "test-ubuntu" Parameter-Request Option 55, length 16: Subnet-Mask, BR, Time-Zone, Default-Gateway Domain-Name, Domain-Name-Server, Option 119, Hostname Netbios-Name-Server, Netbios-Scope, MTU, Classless-Static-Route NTP, Classless-Static-Route-Microsoft, Static-Route, Option 252 1450.060780 IP (tos 0x0, ttl 64, id 53564, offset 0, flags [none], proto UDP (17), length 339) 10.10.1.1.67 > 10.10.1.163.68: BOOTP/DHCP, Reply, length 311, xid 0xc9779c2a, Flags [none] Your-IP 10.10.1.163 Server-IP 10.10.1.1 Client-Ethernet-Address 00xxxx:d5 Vendor-rfc1048 Extensions Magic Cookie 0x63825363 DHCP-Message Option 53, length 1: ACK Server-ID Option 54, length 4: 10.10.1.1 Lease-Time Option 51, length 4: 86400 RN Option 58, length 4: 43200 RB Option 59, length 4: 75600 Subnet-Mask Option 1, length 4: 255.255.255.0 BR Option 28, length 4: 10.10.1.255 Domain-Name-Server Option 6, length 4: 10.10.1.1 Hostname Option 12, length 14: "test-ubuntu" T252 Option 252, length 1: 10 Default-Gateway Option 3, length 4: 10.10.1.1
鏈接:https://www.cnblogs.com/wang_yb/p/17841674.html
-
網絡故障
+關注
關注
0文章
29瀏覽量
8494 -
安全測試
+關注
關注
0文章
28瀏覽量
8722
原文標題:使用示例
文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
相關推薦
評論