Rhel

使用 tcpdump 提取 NFS RPC 內容

  • May 23, 2018

相當簡單的問題…我正在執行 tcpdump 並嘗試分析伺服器/客戶端之間的 TCP 數據包的內容。我看到正在接收“GETATTR”RPC,這太棒了!但是,我想知道正在為其製作 RPC 的文件。我假設這是在數據包內容中。當我將 tcpdump 列印為 ASCII 時。

From server:
tcpdump -vvv -s 200 port 2049 
14:45:38.408949 IP (tos 0x0, ttl 64, id 58408, offset 0, flags [DF], proto TCP (6), length 296)
myserver.nfs > myclient.2469839164: reply ok 240 getattr NON 3 ids 0/3 sz 0

此處和其他站點顯示可以映射到文件名。也許它取決於平台?我只是想確保我缺少的 tcpdump 沒有明顯的選項。

我正在執行 RH5 - 核心 2.6.32-279.el6.x86_64

好的,所以我想我設法找到了“解決方法”。您將無法使用 NFSv3 獲取文件名,但您將能夠獲取 inode。

使用 Wireshark,

轉到編輯 -> 首選項 -> 協議 -> NFS -> 選中所有框並將“將 nfs 句柄解碼為:KNFSD_LE.

保存。現在通過 NFS 協議進行擷取和過濾。

搜尋數據包GETATTR Reply (Call in #) Regular file mode: ???.

打開這個打包並展開以下內容:

Network File System -> obj_attributes 

檢查值fileid,這將是文件的 inode 號。

在伺服器上轉到 nfs 共享和

find . -inum inode

使用 NFSv4,您可以直接看到帶有文件名的呼叫。

你可以看看github 上的nfstrace 工具:(https://github.com/epam/nfstrace)。它跟踪所有擷取的 NFSv3/NFSv4 過程。

引用自:https://unix.stackexchange.com/questions/90401