網絡抓包工具tcpdump的使用

tcpdump

????????tcpdump命令是基于unix系統的命令行的數據報嗅探工具,可以抓取流動在網卡上的數據包,熟悉 tcpdump 的使用能夠幫助你分析調試網絡數據。

原理

????????linux抓包是通過注冊一種虛擬的底層網絡協議來完成對網絡報文(準確的是網絡設備)消息的處理權。當網卡接收到一個網絡報文之后,它會遍歷系統中所有已經注冊的網絡協議,如以太網協議、x25協議處理模塊來嘗試進行報文的解析處理。當抓包模塊把自己偽裝成一個網絡協議的時候,系統在收到報文的時候就會給這個偽協議一次機會,讓它對網卡收到的保溫進行一次處理,此時該模塊就會趁機對報文進行窺探,也就是啊這個報文完完整整的復制一份,假裝是自己接收的報文,匯報給抓包模塊。

tcpdump常用命令

tcpdump --help 幫助命令

(1)、類型的關鍵字

host:指明一臺主機。如:host 10.1.110.110net:指明一個網絡地址,如:net 10.1.0.0port:指明端口號:如:port 8090

(2)、確定方向的關鍵字

src:ip包的源地址,如:src 10.1.110.110dst:ip包的目標地址。如:dst 10.1.110.110

(3)、協議的關鍵字(缺省是所有協議的信息包)

fddi、ip、arp、rarp、tcp、udp。

(4)、其它關鍵字

gateway、broadcast、less、greater。

(5)、常用表達式

! or not&& or and|| or or

(6)、參數詳解

  • A:以ascii編碼打印每個報文(不包括鏈路的頭)。
  • a:將網絡地址和廣播地址轉變成名字。
  • c:抓取指定數目的包。
  • C:用于判斷用
  • -w 選項將報文寫入的文件的大小是否超過這個值,如果超過了就新建文件(文件名后綴是1、2、3依次增加);
  • d:將匹配信息包的代碼以人們能夠理解的匯編格式給出;
  • dd:將匹配信息包的代碼以c語言程序段的格式給出;
  • ddd:將匹配信息包的代碼以十進制的形式給出;
  • D:列出當前主機的所有網卡編號和名稱,可以用于選項 -i;
  • e:在輸出行打印出數據鏈路層的頭部信息;
  • f:將外部的Internet地址以數字的形式打印出來;
  • F:從指定的文件中讀取表達式,忽略其它的表達式;
  • i:監聽主機的該網卡上的數據流,如果沒有指定,就會使用最小網卡編號的網卡(在選項-D可知道,但是不包括環路接口),linux 2.2 內核及之后的版本支持 any 網卡,用于指代任意網卡;
  • l:如果沒有使用 -w 選項,就可以將報文打印到 標準輸出終端(此時這是默認);
  • n:顯示ip,而不是主機名;
  • nn:顯示port,而不是服務名;
  • N:不列出域名;
  • O:不將數據包編碼最佳化;
  • p:不讓網絡界面進入混雜模式;
  • q:快速輸出,僅列出少數的傳輸協議信息;
  • r:從指定的文件中讀取包(這些包一般通過-w選項產生);
  • s:指定抓包顯示一行的寬度,-s0表示可按包長顯示完整的包,經常和-A一起用,默認截取長度為60個字節,但一般ethernet MTU都是1500字節。所以,要抓取大于68字節的包時,使用默認參數就會導致包數據丟失;
  • S:用絕對而非相對數值列出TCP關聯數;
  • t:在輸出的每一行不打印時間戳;
  • tt:在輸出的每一行顯示未經格式化的時間戳記;
  • T:將監聽到的包直接解釋為指定的類型的報文,常見的類型有rpc (遠程過程調用)和snmp(簡單網絡管理協議);
  • v:輸出一個稍微詳細的信息,例如在ip包中可以包括ttl和服務類型的信息;
  • vv:輸出詳細的報文信息
  • ;x/-xx/-X/-XX:以十六進制顯示包內容,幾個選項只有細微的差別,詳見man手冊;
  • w:直接將包寫入文件中,并不分析和打印出來;
  • expression:用于篩選的邏輯表達式;

基本語法和使用方法

基本用法

基礎用法

tcpdump -i eth0 -nn -s0 -v port 80

  • -i?: 選擇要捕獲的接口,通常是以太網卡或無線網卡,也可以是 vlan 或其他特殊接口。如果該系統上只有一個網絡接口,則無需指定。
  • -nn?: 單個 n 表示不解析域名,直接顯示 IP;兩個 n 表示不解析域名和端口。這樣不僅方便查看 IP 和端口號,而且在抓取大量數據時非常高效,因為域名解析會降低抓取速度。
  • -s0?: tcpdump 默認只會截取前 96 字節的內容,要想截取所有的報文內容,可以使用 -s number, number 就是你要截取的報文字節數,如果是 0 的話,表示截取報文全部內容。
  • -v?: 使用 -v,-vv 和 -vvv 來顯示更多的詳細信息,通常會顯示更多與特定協議相關的信息。
  • port 80 : 這是一個常見的端口過濾器,表示僅抓取 80 端口上的流量,通常是 HTTP。

額外再介紹幾個常用參數:

  • -p?: 不讓網絡接口進入混雜模式。默認情況下使用 tcpdump 抓包時,會讓網絡接口進入混雜模式。一般計算機網卡都工作在非混雜模式下,此時網卡只接受來自網絡端口的目的地址指向自己的數據。當網卡工作在混雜模式下時,網卡將來自接口的所有數據都捕獲并交給相應的驅動程序。如果設備接入的交換機開啟了混雜模式,使用 -p 選項可以有效地過濾噪聲。
  • -e?: 顯示數據鏈路層信息。默認情況下 tcpdump 不會顯示數據鏈路層信息,使用 -e 選項可以顯示源和目的 MAC 地址,以及 VLAN tag 信息。如:

tcpdump -n -e -c 5 not ip6

顯示 ASCII 字符串

-A 表示使用 ASCII 字符串打印報文的全部數據,這樣可以使讀取更加簡單,方便使用 grep 等工具解析輸出內容。-X 表示同時使用十六進制和 ASCII 字符串打印報文的全部數據。這兩個參數不能一起使用。例如:

tcpdump -A -s0 port 80

抓取特定協議的數據

后面可以跟上協議名稱來過濾特定協議的流量,以 UDP 為例,可以加上參數 udp 或 protocol 17,這兩個命令意思相同。

$ tcpdump -i eth0 udp$ tcpdump -i eth0 proto 17

同理,tcp 與 protocol 6 意思相同。

抓取特定主機的數據

使用過濾器 host 可以抓取特定目的地和源 IP 地址的流量。

$ tcpdump -i eth0 host 10.10.1.1

也可以使用 src 或 dst 只抓取源或目的地:

$ tcpdump -i eth0 dst 10.10.1.20

將抓取的數據寫入文件

使用 tcpdump 截取數據報文的時候,默認會打印到屏幕的默認輸出,你會看到按照順序和格式,很多的數據一行行快速閃過,根本來不及看清楚所有的內容。不過,tcpdump 提供了把截取的數據保存到文件的功能,以便后面使用其他圖形工具(比如 wireshark,Snort)來分析。

-w 選項用來把數據報文輸出到文件:

$ tcpdump -i eth0 -s0 -w test.pcap

行緩沖模式

如果想實時將抓取到的數據通過管道傳遞給其他工具來處理,需要使用 -l 選項來開啟行緩沖模式(或使用 -c 選項來開啟數據包緩沖模式)。使用 -l 選項可以將輸出通過立即發送給其他命令,其他命令會立即響應。

$ tcpdump -i eth0 -s0 -l port 80 | grep 'Server:'

組合過濾器

過濾的真正強大之處在于你可以隨意組合它們,而連接它們的邏輯就是常用的 與/AND/&& 、 或/OR/|| 和 非/not/!。

and or &&or or ||not or !

過濾器

關于 tcpdump 的過濾器,由于機器上的網絡報文數量異常的多,很多時候我們只關系和具體問題有關的數據報(比如訪問某個網站的數據,或者 icmp 超時的報文等等),而這些數據只占到很小的一部分。把所有的數據截取下來,從里面找到想要的信息無疑是一件很費時費力的工作。而 tcpdump 提供了靈活的語法可以精確地截取關心的數據報,簡化分析的工作量。這些選擇數據包的語句就是過濾器(filter)!

Host 過濾器

Host 過濾器用來過濾某個主機的數據報文。例如:

$ tcpdump host 1.2.3.4

該命令會抓取所有發往主機 1.2.3.4 或者從主機 1.2.3.4 發出的流量。如果想只抓取從該主機發出的流量,可以使用下面的命令:

$ tcpdump src host 1.2.3.4

Network 過濾器

Network 過濾器用來過濾某個網段的數據,使用的是 CIDR 模式。可以使用四元組(x.x.x.x)、三元組(x.x.x)、二元組(x.x)和一元組(x)。四元組就是指定某個主機,三元組表示子網掩碼為 255.255.255.0,二元組表示子網掩碼為 255.255.0.0,一元組表示子網掩碼為 255.0.0.0。例如,

抓取所有發往網段 192.168.1.x 或從網段 192.168.1.x 發出的流量:

$ tcpdump net 192.168.1

抓取所有發往網段 10.x.x.x 或從網段 10.x.x.x 發出的流量:

$ tcpdump net 10

和 Host 過濾器一樣,這里也可以指定源和目的:

$ tcpdump src net 10

也可以使用 CIDR 格式:

$ tcpdump src net 172.16.0.0/12

Proto 過濾器

Proto 過濾器用來過濾某個協議的數據,關鍵字為 proto,可省略。proto 后面可以跟上協議號或協議名稱,支持 icmp, igmp, igrp, pim, ah, esp, carp, vrrp, udp和 tcp。因為通常的協議名稱是保留字段,所以在于 proto 指令一起使用時,必須根據 shell 類型使用一個或兩個反斜杠(/)來轉義。Linux 中的 shell 需要使用兩個反斜杠來轉義,MacOS 只需要一個。

例如,抓取 icmp 協議的報文:

$ tcpdump -n proto \\icmp# 或者$ tcpdump -n icmp

Port 過濾器

Port 過濾器用來過濾通過某個端口的數據報文,關鍵字為 port。例如:

$ tcpdump port 389

常用命令組合

1、獲取10.1.85.21和10.1.85.19之間的通信,使用命令注意轉義符號。

[root@centos daocoder]# tcpdump host 10.1.85.21 and \( 10.1.85.19\) -i ens5f0 -nn -c 10

2、獲取從10.1.85.21發來的包。

[root@centos daocoder]# tcpdump src host 10.1.85.21 -c 10 -i ens5f1

3、監聽tcp(udp)端口。

[root@centos daocoder]# tcpdump tcp port 22 -c 10

4、獲取主機10.1.85.21和除10.1.85.19之外所有主機的通信。

[root@centos daocoder]# tcpdump ip host 10.1.85.21 and ! 10.1.85.19 -c 10 -i any

5、獲取從10.1.85.19且端口主機到10.1.85.21主機的通信。

[root@centos daocoder]# tcpdump src host 10.1.85.19 and src port 48565 and dst host 10.1.85.21 and dst port 5090 -i any -c 10 -nn

理解 tcpdump 的輸出

截取數據只是第一步,第二步就是理解這些數據,下面就解釋一下 tcpdump 命令輸出各部分的意義。

21:27:06.995846 IP (tos 0x0, ttl 64, id 45646, offset 0, flags [DF], proto TCP (6), length 64) 192.168.1.106.56166 > 124.192.132.54.80: Flags [S], cksum 0xa730 (correct), seq 992042666, win 65535, options [mss 1460,nop,wscale 4,nop,nop,TS val 663433143 ecr 0,sackOK,eol], length 021:27:07.030487 IP (tos 0x0, ttl 51, id 0, offset 0, flags [DF], proto TCP (6), length 44) 124.192.132.54.80 > 192.168.1.106.56166: Flags [S.], cksum 0xedc0 (correct), seq 2147006684, ack 992042667, win 14600, options [mss 1440], length 021:27:07.030527 IP (tos 0x0, ttl 64, id 59119, offset 0, flags [DF], proto TCP (6), length 40) 192.168.1.106.56166 > 124.192.132.54.80: Flags [.], cksum 0x3e72 (correct), ack 2147006685, win 65535, length 0

最基本也是最重要的信息就是數據報的源地址/端口和目的地址/端口,上面的例子第一條數據報中,源地址 ip 是 192.168.1.106,源端口是 56166,目的地址是 124.192.132.54,目的端口是 80。 > 符號代表數據的方向。

此外,上面的三條數據還是 tcp 協議的三次握手過程,第一條就是 SYN 報文,這個可以通過 Flags [S] 看出。下面是常見的 TCP 報文的 Flags:

  • [S] : SYN(開始連接)
  • [.] : 沒有 Flag
  • [P] : PSH(推送數據)
  • [F] : FIN (結束連接)
  • [R] : RST(重置連接)

而第二條數據的 [S.] 表示 SYN-ACK,就是 SYN 報文的應答報文。

?例子

下面給出一些具體的例子,每個例子都可以使用多種方法來獲得相同的輸出,你使用的方法取決于所需的輸出和網絡上的流量。我們在排障時,通常只想獲取自己想要的內容,可以通過過濾器和 ASCII 輸出并結合管道與 grep、cut、awk 等工具來實現此目的。

抓取http數據包

在抓取 HTTP 請求和響應數據包時,可以通過刪除標志 SYN/ACK/FIN 來過濾噪聲,但還有更簡單的方法,那就是通過管道傳遞給 grep。在達到目的的同時,我們要選擇最簡單最高效的方法。下面來看例子。

提取 HTTP 用戶代理

從 HTTP 請求頭中提取 HTTP 用戶代理:

$ tcpdump -nn -A -s1500 -l | grep "User-Agent:"

通過 egrep 可以同時提取用戶代理和主機名(或其他頭文件):

$ tcpdump -nn -A -s1500 -l | egrep -i 'User-Agent:|Host:'

只抓取 HTTP GET 和 POST 流量

抓取 HTTP GET 流量:

$ tcpdump -s 0 -A -vv 'tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420'

也可以抓取 HTTP POST 請求流量:

$ tcpdump -s 0 -A -vv 'tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x504f5354'

注意:該方法不能保證抓取到 HTTP POST 有效數據流量,因為一個 POST 請求會被分割為多個 TCP 數據包。

上述兩個表達式中的十六進制將會與 GET 和 POST 請求的 ASCII 字符串匹配。例如,tcp[((tcp[12:1] & 0xf0) >> 2):4] 首先會確定我們感興趣的字節的位置(在 TCP header 之后),然后選擇我們希望匹配的 4 個字節。

提取 HTTP 請求的 URL

提取 HTTP 請求的主機名和路徑:

$ 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

提取 HTTP POST 請求中的密碼

從 HTTP POST 請求中提取密碼和主機名:

$ tcpdump -s 0 -A -n -l | egrep -i "POST /|pwd=|passwd=|password=|Host:"

tcpdump: verbose output suppressed, use -v or -vv for full protocol decodelistening on enp7s0, link-type EN10MB (Ethernet), capture size 262144 bytes11:25:54.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.1Host: 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

提取 Cookies

提取 Set-Cookie(服務端的 Cookie)和 Cookie(客戶端的 Cookie):

$ tcpdump -nn -A -s0 -l | egrep -i 'Set-Cookie|Host:|Cookie:'

tcpdump: verbose output suppressed, use -v or -vv for full protocol decodelistening on wlp58s0, link-type EN10MB (Ethernet), capture size 262144 bytesHost: dev.example.comCookie: 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 數據包

查看網絡上的所有 ICMP 數據包:

$ tcpdump -n icmp

tcpdump: verbose output suppressed, use -v or -vv for full protocol decodelistening on enp7s0, link-type EN10MB (Ethernet), capture size 262144 bytes11:34:21.590380 IP 10.10.1.217 > 10.10.1.30: ICMP echo request, id 27948, seq 1, length 6411:34:21.590434 IP 10.10.1.30 > 10.10.1.217: ICMP echo reply, id 27948, seq 1, length 6411:34:27.680307 IP 10.10.1.159 > 10.10.1.1: ICMP 10.10.1.189 udp port 59619 unreachable, length 115

抓取非 ECHO/REPLY 類型的 ICMP 數據包

通過排除 echo 和 reply 類型的數據包使抓取到的數據包不包括標準的 ping 包:

$ tcpdump 'icmp[icmptype] != icmp-echo and icmp[icmptype] != icmp-echoreply'

tcpdump: verbose output suppressed, use -v or -vv for full protocol decodelistening on enp7s0, link-type EN10MB (Ethernet), capture size 262144 bytes11:37:04.041037 IP 10.10.1.189 > 10.10.1.20: ICMP 10.10.1.189 udp port 36078 unreachable, length 156

抓取 SMTP/POP3 協議的郵件

可以提取電子郵件的正文和其他數據。例如,只提取電子郵件的收件人:

$ tcpdump -nn -l port 25 | grep -i 'MAIL FROM\|RCPT TO'

抓取 NTP 服務的查詢和響應

$ tcpdump dst port 123

tcpdump: verbose output suppressed, use -v or -vv for full protocol decodelistening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes21:02:19.112502 IP test33.ntp > 199.30.140.74.ntp: NTPv4, Client, length 4821:02:19.113888 IP 216.239.35.0.ntp > test33.ntp: NTPv4, Server, length 4821:02:20.150347 IP test33.ntp > 216.239.35.0.ntp: NTPv4, Client, length 4821:02:20.150991 IP 216.239.35.0.ntp > test33.ntp: NTPv4, Server, length 48

抓取 SNMP 服務的查詢和響應

通過 SNMP 服務,滲透測試人員可以獲取大量的設備和系統信息。在這些信息中,系統信息最為關鍵,如操作系統版本、內核版本等。使用 SNMP 協議快速掃描程序 onesixtyone,可以看到目標系統的信息:

$ onesixtyone 10.10.1.10 publicScanning 1 hosts, 1 communities10.10.1.10 [public] Linux test33 4.15.0-20-generic #21-Ubuntu SMP Tue Apr 24 06:16:15 UTC 2018 x86_64

可以通過 tcpdump 抓取 GetRequest 和 GetResponse:

$ tcpdump -n -s0 port 161 and udp

tcpdump: verbose output suppressed, use -v or -vv for full protocol decodelistening on wlp58s0, link-type EN10MB (Ethernet), capture size 262144 bytes23:39:13.725522 IP 10.10.1.159.36826 > 10.10.1.20.161: GetRequest(28) .1.3.6.1.2.1.1.1.023:39:13.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 06:16:15 UTC 2018 x86_64"

切割 pcap 文件

當抓取大量數據并寫入文件時,可以自動切割為多個大小相同的文件。例如,下面的命令表示每 3600 秒創建一個新文件 capture-(hour).pcap,每個文件大小不超過 200*1000000 字節:

$ tcpdump -w /tmp/capture-%H.pcap -G 3600 -C 200

這些文件的命名為 capture-{1-24}.pcap,24 小時之后,之前的文件就會被覆蓋。

抓取 IPv6 流量

可以通過過濾器 ip6 來抓取 IPv6 流量,同時可以指定協議如 TCP:

$ tcpdump -nn ip6 proto 6

從之前保存的文件中讀取 IPv6 UDP 數據報文:

$ tcpdump -nr ipv6-test.pcap ip6 proto 17

檢測端口掃描

在下面的例子中,你會發現抓取到的報文的源和目的一直不變,且帶有標志位 [S] 和 [R],它們與一系列看似隨機的目標端口進行匹配。當發送 SYN 之后,如果目標主機的端口沒有打開,就會返回一個 RESET。這是 Nmap 等端口掃描工具的標準做法。

$ tcpdump -nn21:46:19.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 021:46:19.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 021:46:19.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 021:46:19.693772 IP 10.10.1.199.389 > 10.10.1.10.44244: Flags [R.], seq 0, ack 2214070268, win 0, length 021:46:19.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 021:46:19.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 021:46:19.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 021:46:19.695590 IP 10.10.1.199.49154 > 10.10.1.10.55130: Flags [R.], seq 0, ack 3230403373, win 0, length 021:46:19.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 021:46:19.695622 IP 10.10.1.199.49152 > 10.10.1.10.33460: Flags [R.], seq 0, ack 3289070069, win 0, length 021:46:19.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 021:46:19.695650 IP 10.10.1.199.1029 > 10.10.1.10.34940: Flags [R.], seq 0, ack 140319148, win 0, length 021:46:19.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 021:46:19.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 021:46:19.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 測試腳本 http-enum.nse 用來檢測 HTTP 服務的合法 URL。

在執行腳本測試的主機上:

$ nmap -p 80 --script=http-enum.nse targetip

在目標主機上:

$ tcpdump -nn port 80 | grep "GET /"GET /w3perl/ HTTP/1.1GET /w-agora/ HTTP/1.1GET /way-board/ HTTP/1.1GET /web800fo/ HTTP/1.1GET /webaccess/ HTTP/1.1GET /webadmin/ HTTP/1.1GET /webAdmin/ HTTP/1.1

抓取 DNS 請求和響應

向 Google 公共 DNS 發起的出站 DNS 請求和 A 記錄響應可以通過 tcpdump 抓取到:

$ tcpdump -i wlp58s0 -s0 port 53

tcpdump: verbose output suppressed, use -v or -vv for full protocol decodelistening on wlp58s0, link-type EN10MB (Ethernet), capture size 262144 bytes14:19:06.879799 IP test.53852 > google-public-dns-a.google.com.domain: 26977+ [1au] A? play.google.com. (44)14:19:07.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)) != 0)'

將輸出內容重定向到 Wireshark

通常 Wireshark(或 tshark)比 tcpdump 更容易分析應用層協議。一般的做法是在遠程服務器上先使用 tcpdump 抓取數據并寫入文件,然后再將文件拷貝到本地工作站上用 Wireshark 分析。

還有一種更高效的方法,可以通過 ssh 連接將抓取到的數據實時發送給 Wireshark 進行分析。以 MacOS 系統為例,可以通過 brew cask install wireshark 來安裝,然后通過下面的命令來分析:

$ ssh root@remotesystem 'tcpdump -s0 -c 1000 -nn -w - not port 22' | /Applications/Wireshark.app/Contents/MacOS/Wireshark -k -i -

例如,如果想分析 DNS 協議,可以使用下面的命令:

$ ssh root@remotesystem 'tcpdump -s0 -c 1000 -nn -w - port 53' | /Applications/Wireshark.app/Contents/MacOS/Wireshark -k -i -

-c 選項用來限制抓取數據的大小。如果不限制大小,就只能通過 ctrl-c 來停止抓取,這樣一來不僅關閉了 tcpdump,也關閉了 wireshark。

找出發包最多的 IP

找出一段時間內發包最多的 IP,或者從一堆報文中找出發包最多的 IP,可以使用下面的命令:

$ 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 decodelistening on enp7s0, link-type EN10MB (Ethernet), capture size 262144 bytes200 packets captured261 packets received by filter0 packets dropped by kernel 108 IP 10.10.211.181 91 IP 10.10.1.30 1 IP 10.10.1.50

  • cut -f 1,2,3,4 -d '.' : 以 . 為分隔符,打印出每行的前四列。即 IP 地址。
  • sort | uniq -c : 排序并計數
  • sort -nr : 按照數值大小逆向排序

抓取用戶名和密碼

本例將重點放在標準純文本協議上,過濾出于用戶名和密碼相關的報文:

$ 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 報文

抓取 DHCP 服務的請求和響應報文,67 為 DHCP 端口,68 為客戶機端口。

$ tcpdump -v -n port 67 or 68

tcpdump: listening on enp7s0, link-type EN10MB (Ethernet), capture size 262144 bytes14:37:50.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 00:0c:xx:xx:xx:d5, length 300, xid 0xc9779c2a, Flags [none] Client-Ethernet-Address 00:0c:xx:xx:xx: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 25214:37:50.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 00:0c:xx:xx:xx:d5, length 300, xid 0xc9779c2a, Flags [none] Client-Ethernet-Address 00:0c:xx:xx:xx: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 25214:37:50.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 00:0c:xx:xx:xx: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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/46162.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/46162.shtml
英文地址,請注明出處:http://en.pswp.cn/web/46162.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

鼠標的發明和鼠標“變形記”

注:機翻,未校對。 Who Invented the Computer Mouse? 誰發明了電腦鼠標? It was technology visionary and inventor Douglas Engelbart (January 30, 1925 – July 2, 2013) who revolutionized the way computers worked, turning it fr…

Flink源碼學習資料

Flink系列文檔腦圖 由于源碼分析系列文檔較多,本人繪制了Flink文檔腦圖。和下面的文檔目錄對應。各位讀者可以選擇自己感興趣的模塊閱讀并參與討論。 此腦圖不定期更新中…… 文章目錄 以下是本人Flink 源碼分析系列文檔目錄,歡迎大家查閱和參與討論。…

偽元素::before :: after的用法?

::before 和 ::after 是 CSS 偽元素,用于在元素內容的前面或后面插入內容。這些偽元素不會改變文檔的實際內容,但可以用來添加裝飾性元素或文本。以下是它們的用法和一些常見示例。 基本用法 ::before ::before 偽元素用于在元素的內容之前插入內容。 …

【簡潔明了】調節大模型的prompt的方法【帶案例】

簡明調節大模型的prompt的方法【簡潔明了帶案例】 1. 明確任務目標2. 提供上下文3. 指定格式4. 限制輸出長度5. 使用示例6. 逐步引導7. 提供反面例子8. 使用CoT思維鏈9. 反復試驗和調整方法九解釋:喬哈里窗檢視 最后 因為網上給出的調節prompt都 過于詳細&#xff…

用 WireShark 抓住 TCP

Wireshark 是幫助我們分析網絡請求的利器,建議每個同學都裝一個。我們先用 Wireshark 抓取一個完整的連接建立、發送數據、斷開連接的過程。 簡單的介紹一下操作流程。 1、首先打開 Wireshark,在歡迎界面會列出當前機器上的所有網口、虛機網口等可以抓取…

網絡通信介紹

一、 簡介 網絡通信,簡而言之,就是通過各種物理鏈路和協議,實現不同地理位置的計算機或其他電子設備之間信息交換的過程。這些信息可以是文本、圖像、音頻、視頻等多種格式,通過網絡傳輸至目標設備,從而實現遠程通信、…

怎樣減少視頻的容量 怎樣減少視頻內存保持清晰度

在數字媒體時代,視頻內容已經成為人們日常交流和信息傳遞的重要方式。然而,視頻往往占用大量存儲空間,給我們的設備帶來不小的負擔。如何在不損失視頻質量的前提下,減少視頻文件的大小呢?本文將為你揭秘幾個實用的技巧…

Qt 使用Installer Framework制作安裝包

Qt 使用Installer Framework制作安裝包 引言一、下載安裝 Qt Installer Framework二、簡單使用2.1 創建目錄結構 (文件夾結構)2.2 制作程序壓縮包2.3 制作程序安裝包 引言 Qt Installer Framework (安裝程序框架)是一個強大的工具集,用于創建自定義的在線和離線安裝…

探索 TransactionSynchronizationManager.afterCommit 的原理及使用

在日常的企業級開發中,我們經常需要在事務提交之后執行一些操作,例如記錄日志、發送通知等。Spring 提供了一個方便的機制來實現這個需求,那就是 TransactionSynchronizationManager.afterCommit。本文將詳細探討 TransactionSynchronization…

【開發指南】HTML和JS編寫多用戶VR應用程序的框架

1.概述 Networked-Aframe 的工作原理是將實體及其組件同步到連接的用戶。要連接到房間,您需要將networked-scene組件添加到a-scene元素。對于要同步的實體,請向其添加networked組件。默認情況下,position和rotation組件是同步的,…

同三維T80004解碼器視頻使用操作說明書:高清HDMI解碼器,高清SDI解碼器,4K超清HDMI解碼器,雙路4K超高清解碼器

同三維T80004解碼器視頻使用操作說明書:高清HDMI解碼器,高清SDI解碼器,4K超清HDMI解碼器,雙路4K超高清解碼器 同三維T80004解碼器系列視頻使用操作說明書:高清HDMI解碼器,高清SDI解碼器,4K超清H…

未來的社交標桿:如何通過AI讓Facebook更加智能化?

在當今信息爆炸的時代,社交媒體平臺的智能化已成為提高用戶體驗和互動質量的關鍵因素。Facebook,作為全球最大的社交平臺之一,通過人工智能(AI)的廣泛應用,正不斷推進其智能化進程。本文將探討Facebook如何…

CAS的原理

CAS(Compare-And-Swap 或 Compare-And-Set)是一種用于實現并發編程中無鎖(lock-free)數據結構的原子操作。CAS 操作比較內存中的某個位置的當前值是否等于預期值,如果相等,則將其更新為新的值,否…

代碼隨想錄學習 54day 圖論 from代碼隨想錄

圖論總結篇 從深搜廣搜 到并查集,從最小生成樹到拓撲排序, 最后是最短路算法系列。至此算上本篇,一共30篇文章,圖論之旅就在此收官了。在0098.所有可達路徑 ,我們接觸了兩種圖的存儲方式,鄰接表和鄰接矩陣…

B樹(B-Tree)數據結構

1. 什么是B樹? B樹(B-Tree)是一種多路搜索樹,用于存儲和檢索大量數據。它是自適應的,適用于各種存儲設備和各種數據量。B樹的特點是高效的搜索、插入和刪除操作,且可以在各種情況下保持樹的平衡。 2. B樹…

昇思25天學習打卡營第16天 | Vision Transformer圖像分類

昇思25天學習打卡營第16天 | Vision Transformer圖像分類 文章目錄 昇思25天學習打卡營第16天 | Vision Transformer圖像分類Vision Transform(ViT)模型TransformerAttention模塊Encoder模塊 ViT模型輸入 模型構建Multi-Head Attention模塊Encoder模塊Pa…

工業三防平板助力工廠生產數據實時管理

在當今高度數字化和智能化的工業生產環境中,工業三防平板正逐漸成為工廠實現生產數據實時管理的得力助手。這種創新的技術設備不僅能夠在惡劣的工業環境中穩定運行,還為工廠的生產流程優化、效率提升和質量控制帶來了前所未有的機遇。 工業生產場景通常充…

機器學習——數據預處理和特征工程(sklearn)

目錄 一、數據挖掘流程 1. 獲取數據 2. 數據預處理 3. 特征工程 4. 建模,測試模型并預測出結果 5. 驗證模型效果 二、sklearn中的相關包 1.sklearn.preprocessing 2.sklearn.Impute 3.sklearn.feature_selection 4.sklearn.decomposition 三、數據預處理…

【網絡安全】PostMessage:分析JS實現XSS

未經許可,不得轉載。 文章目錄 前言示例正文 前言 PostMessage是一個用于在網頁間安全地發送消息的瀏覽器 API。它允許不同的窗口(例如,來自同一域名下的不同頁面或者不同域名下的跨域頁面)進行通信,而無需通過服務器…

【Arduino IDE】安裝及開發環境、ESP32庫

一、Arduino IDE下載 二、Arduino IDE安裝 三、ESP32庫 四、Arduino-ESP32庫配置 五、新建ESP32-S3N15R8工程文件 樂鑫官網 Arduino官方下載地址 Arduino官方社區 Arduino中文社區 一、Arduino IDE下載 ESP-IDF、MicroPython和Arduino是三種不同的開發框架,各自適…