❶ MACOS: Wireshark 抓不了包最常見的原因是忘記給自己授權
Wireshark 是一款強大的網路分析工具,用於捕獲和分析網路流量。然而在使用過程中,經常會遇到無法抓取包的情況,最常見原因之一是用戶未被授權使用。
為解決這一問題,Wireshark 提供了相應的解決方案。首先,將當前用戶添加到 "access_bpf" 組,使用命令如下:
sudo dseditgroup -o edit -a `whoami` -t user access_bpf
完成用戶組添加後,啟動 Wireshark 腳本:
sudo "/Library/Application Support/Wireshark/ChmodBPF/ChmodBPF"
腳本解釋了背後的原理,指出 macOS 的 devfs 基於舊的 FreeBSD,並非當前版本。因此,無法針對特定的用戶或組配置 BPF 設備。BPF 設備在 macOS 環境下具有特殊屬性,它們是非克隆的,可以隨時創建。腳本的目的是預創建一些 BPF 設備,並將它們所有權賦予 "access_bpf" 組,設置許可權為 rw-rw----,確保組內成員能夠訪問並使用這些設備進行捕獲或發送原始數據包。
通過這些步驟,用戶可解決 Wireshark 抓包時遇到的授權問題,使得網路分析工作得以順利進行。
❷ wireshark怎麼通過抓包分析網路故障
你可以在 wireshark 軟體中設置各種過濾規則,(filter)來捕獲各種有用的數據包。然後保存到寬含一個文件中,最後對那個文件山鉛中慎唯笑的內容進行數據包分析。
❸ wireshark數據包打開報錯怎麼解決
1
打開wireshark軟體,點擊「介面列表」,出現一個提示框,裡面的文字是「沒有一個可以抓包的介面」。
❹ Wireshark常見提示
1.[Packet size limited ring capture]
當你看到這個提示,說明被標記的那個包沒有抓全。以圖1的4號包為例,它全長有171位元組,但只有前96個位元組被抓到了,因此Wireshark給了此提示。
這種情況一般是由抓包方式引起的。在有些操作系統中,tcpmp默認只抓每個幀的前96個位元組,我們可以用「-s」參數來指定想要抓到的位元組數,比如下面這條命令可以抓到1000位元組。
[root @ ubuntu]#tcpmp -i eth0 -s 1000 -w /tmp/tcpmp.cap
2.[TCPPrevious segment not captured]
在TCP傳輸過程中,同一台主機發出的數據段應該是連續的,即後一個包的 Seq 號等於前一個包的 Seq Len (三次握手和四次揮手是例外)。如果Wireshark發現後一個包的Seq號大於前一個包的Seq Len,就知道中間缺失了一段數據。假如缺失的那段數據在整個網路包中都找不到(即排除了亂序),就會提示[TCPPrevious segment not captured]。比如在圖2這個例子中,6號包的Seq號1449大於5號包的Seq Len=1 0=1,說明中間有個攜帶1448位元組的包沒被抓到,它就是「Seq=1, Len=1448」。
網路包沒被抓到還分兩種情況:一種是真的丟了;另一種是實際上沒有丟,但被抓包工具漏掉了。在Wireshark中如何區分這兩種情況呢?只要看對方回復的確認(Ack)就行了。如果該確認包含了沒抓到的那個包,那就是抓包工具漏掉而已,否則就是真的丟了。
順便分析一下圖2這個網路包,它是HTTPS傳輸異常時在客戶端抓的。因為「Len: 667」的小包(即6號包)可以送達,但「Len: 1448」的大包卻丟了,說明路徑上可能有個網路設備的MTU比較小,會丟棄大包。後來的解決方式證實了這個猜測,只要把整個網路路徑的MTU保持一致,問題就消失了。
3.[TCP ACKed unseen segment]
當Wireshark發現被Ack的那個包沒被抓到,就會提示[TCP ACKed unseen segment]。這可能是最常見的Wireshark提示了,幸好它幾乎是永遠可以忽略的。以圖3為例,32號包的Seq Len=6889 1448=8337,說明伺服器發出的下一個包應該是Seq=8337。而我們看到的卻是35號包的Seq=11233,這意味著8337~11232這段數據沒有被抓到。這段數據本應該出現在34號之前,所以Wireshark提示了[TCP ACKed unseen segment]。
不難想像,在一個網路包的開頭會經常看到這個提示,因為只抓到了後面的Ack但沒抓到前面的數據包。
4.[TCP Out-of-Order]
在TCP傳輸過程中(不包括三次握手和四次揮手),同一台主機發出的數據包應該是連續的,即後一個包的 Seq 號等於前一個包的 Seq Len 。也可以說,後一個包的Seq會大於或等於前一個包的Seq。當Wireshark發現後一個包的Seq號小於前一個包的Seq Len時,就會認為是亂序了,因此提示[TCP Out-of-Order]。如圖4所示,3362號包的Seq=2685642小於3360號包的Seq=2712622,所以就是亂序。
小跨度的亂序影響不大,比如原本順序為1、2、3、4、5號包被打亂成2、1、3、4、5就沒事。但跨度大的亂序卻可能觸發快速重傳,比如打亂成2、3、4、5、1時,就會觸發足夠多的Dup ACK,從而導致1號包的重傳。
5.[TCP Dup ACK]
當亂序或者丟包發生時,接收方會收到一些Seq號比期望值大的包。它每收到一個這種包就會Ack一次期望的Seq值,以此方式來提醒發送方,於是就產生了一些重復的Ack。Wireshark會在這種重復的Ack上標記[TCP Dup ACK]。
以圖5為例,伺服器收到的7號包為「Seq=29303, Len=1460」,所以它期望下一個包應該是Seq Len=29303 1460=30763,沒想到實際收到的卻是8號包Seq=32223,說明Seq=30763那個包可能丟失了。因此伺服器立即在9號包發了Ack=30763,表示「我要的是Seq=30763」。由於接下來伺服器收到的10號、12號、14號也都是大於Seq=30763的,因此它每收到一個就回復一次Ack=30763,從圖中可見Wireshark在這些回復上都標記了[TCP Dup ACK]。
6.[TCP Fast Retransmission]
當發送方收到3個或以上[TCP Dup ACK],就意識到之前發的包可能丟了,於是快速重傳它(這是RFC的規定)。以圖6為例,客戶端收到了4個Ack=991851,於是在1177號包重傳了Seq=991851。
7.[TCP Retransmission]
如果一個包真的丟了,又沒有後續包可以在接收方觸發[Dup Ack],就不會快速重傳。這種情況下發送方只好等到超時了再重傳,此類重傳包就會被Wireshark標上[TCP Retransmission]。以圖7為例,客戶端發了原始包(包號1053)之後,一直等不到相應的Ack,於是只能在100多毫秒之後重傳了(包號1225)。
超時重傳是一個非常有技術含量的知識點,比如等待時間的長短就大有學問,本文就不細說了,畢竟需要懂這個的人很少。
8.[TCP zerowindow]
TCP包中的「win=」代表接收窗口的大小,即表示這個包的發送方當前還有多少緩存區可以接收數據。當Wireshark在一個包中發現「win=0」時,就會給它打上「TCP zerowindow」的標志,表示緩存區已滿,不能再接受數據了。比如圖8就是伺服器的緩存區已滿,所以通知客戶端不要再發數據了。我們甚至可以在3258~3263這幾個包中看出它的窗口逐漸減少的過程,即從win=15872減小到win=1472。
9.[TCP window Full]
當Wireshark在一個包中打上[TCP window Full]標志時,就表示這個包的發送方已經把對方所聲明的接收窗口耗盡了。以圖9為例,Britain一直聲明它的接收窗口只有65535,意味著Middle East最多能給它發送65535位元組的數據而無需確認,即「在途位元組數」最多為65535位元組。當Wireshark在包中計算出Middle East已經有65535位元組未被確認時,就會發出此提示。至於Wireshark是怎麼計算的,請參考本書的《計算「在途位元組數」》一文。
[TCP window Full]很容易跟[TCP zerowindow]混淆,實際上它們也有相似之處。前者表示這個包的發送方暫時沒辦法再發送數據了,後者表示這個包的發送方暫時沒辦法再接收數據了,也就是說兩者都意味著傳輸暫停,都必須引起重視。
10.[TCP segment of a reassembled PDU]
當你收到這個提示,肯定已經在EditàPreferencesààTCP菜單里啟用了Allow sub dissector to reassemble TCP streams。它表示Wireshark可以把屬於同一個應用層PDU(比如SMB的Read Response和Write Request之類)的TCP包虛擬地集中起來。如圖10所示,這一個SMB Read Response由39~48號包共同完成,因此Wireshark在最後一個包中虛擬地把所有包集中起來。這樣做有個好處,就是可以右鍵點擊圖10底部的方框,選擇CopyàBytesàPrintable Text Only,從而復制整個應用層的PDU。做研發的同學可能比較需要這個功能。
11.[Continuation to #]
你看到這個提示,說明已經在EditàPreferencesàProtocolsàTCP菜單里關閉了Allow sub dissector to reassemble TCP streams。比如圖10的那些包,一關閉就變成圖11這樣。
仔細對比圖10和圖11,你會發現Read Response在圖10中被算在了48號包頭上,而在圖11中被算到了39號包頭上。這樣會帶來一個詭異的結果:圖10的讀響應時間為2.528毫秒(38號包和48號包的時間差),而圖11的讀響應時間為2.476毫秒(38號包和39號包的時間差)。究竟哪個算正確呢?這個問題很難回答,如果在乎的是實際的總性能,那就看前者;如果想忽略TCP/IP協議的損耗,單看伺服器的響應速度,那就看後者。在某些特殊情況下,這兩者相差非常大,所以必須搞清楚。
12.[Time-to-live exceeded (Fragment reassembly time exceeded)]
ICMP的報錯有好多種,大都不難理解,所以我們只舉其中的一種為例。[Fragment reassembly time exceeded]表示這個包的發送方之前收到了一些分片,但是由於某些原因遲遲無法組裝起來。比如在圖12中,由於上海發往北京的一些包被分片傳輸,且有一部分在路上丟失了,所以北京方無法組裝起來,便只好用這個ICMP報錯告知上海方。
原文轉自:http://blog.sina.com.cn/s/blog_987e00020102wq60.html
❺ wireshark抓包不了瀏覽器
網路問題。wireshark在使用過程中如果出現抓包但是抓不了運行的瀏覽器是因為網路問題導致的,可在網路環境正常時重新抓包即可。
❻ 我用wireshark抓包,什麼都沒開,為什麼出現這種情況
wireshark抓包能抓到你所屬區域網內其他人的數據包,不一定是你自己的包,看看你自己PC的IP地址,然後看看這些數據包的IP地址。另一種可能就是你後台有進程在運行,但是沒有圖標顯示,用任務管理器看看進程