2015-07-19 56 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

谢谢回复!我编辑了我的问题,请再看一遍。我会非常感激。 –