2015-07-19 60 views
0

我設法捕捉通過網絡販賣的文件的內容,但我無法捕捉到file nameSharppcap - 如何獲取traffiqued文件名?

class Program 
{ 
    static void Main(string[] args) 
    { 
     // Retrieve the device list 
     CaptureDeviceList devices = CaptureDeviceList.Instance; 

     // Print out the available network devices 
     foreach (ICaptureDevice dev in devices) 
     { 
      // Extract a device from the list 
      ICaptureDevice device = dev; 

      // Register our handler function to the 
      // 'packet arrival' event 
      device.OnPacketArrival += device_OnPacketArrival; 

      // Open the device for capturing 
      const int readTimeoutMilliseconds = 1000; 
      device.Open(DeviceMode.Promiscuous, readTimeoutMilliseconds); 

      // Start the capturing process 
      device.StartCapture(); 

     } 

     Console.ReadKey(); 

     foreach (var dev in CaptureDeviceList.Instance) 
     { 
      dev.StopCapture(); 
      dev.Close(); 
     } 
    } 


    private static void device_OnPacketArrival(object sender, CaptureEventArgs e) 
    { 
     var data = Encoding.ASCII.GetString(e.Packet.Data); 
     //HERE! When it exists, I need get the file name that was trafficked (eg. FileName.docx). 
    } 
} 

如何在攔截文件訪問協議(NFS | SMB | AFP)時使用Sharpcap獲取文件名?

回答

1

數據包中的文件名稱在哪裏?

它取決於用於傳輸文件的協議。

如果是HTTP,它可能會在GET請求中獲取文件或者PUT或POST來發送它,但這並不能保證。

如果是FTP,它將在STOR或RETR命令中發送或獲取文件。

如果是文件訪問協議,例如NFS或SMB或AFP,它將出現在用於查找或打開文件進行讀取或寫入的請求中。

還要注意,原始數據包的數據有一大堆東西,它是而不是文件內容。從網絡跟蹤中獲取文件名和內容的程序可能至少有上面寫的代碼數量的;它會不是是一個簡單的程序來編寫。

該程序必須解釋包數據中的鏈路層,IP和TCP或UDP標頭,以及用於NFS,NetBIOS-over-TCP或SMB-over-TCP標頭的ONC RPC標頭。 SMB,AFP的DSI頭文件以及NFS,SMB和AFP的協議頭文件。然後,它必須識別查找或打開文件請求,並根據讀取和寫入請求中的文件偏移量找出哪些讀取和寫入請求位於哪些文件上,並重新組合正在讀取或寫入的數據,以獲取文件數據。

+0

謝謝回覆!我編輯了我的問題,請再看一遍。我會非常感激。 –