Rhel
使用 tcpdump 提取 NFS RPC 內容
相當簡單的問題…我正在執行 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 過程。