Sharppcap -如何获得传输的文件名

本文关键字:文件名 传输 何获得 Sharppcap | 更新日期: 2023-09-27 18:03:42

我成功捕获了通过网络传输的文件的内容,但是我无法捕获file name .

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获取文件名

Sharppcap -如何获得传输的文件名

数据包中的文件名在哪里?

这取决于传输文件时使用的协议。

如果是HTTP,它可能会在GET请求中获取文件,或者在PUT或POST请求中发送文件,但这并不能保证。

如果是FTP,它将在STOR或RETR命令中发送或获取文件。

如果它是一个文件访问协议,如NFS或SMB或AFP,它将在用于查找或打开文件进行读写的请求中。

还请注意,原始数据包数据中有一大堆而不是文件内容。从网络跟踪中获取文件名和内容的程序可能需要至少 100倍于你上面写的代码量;它将不是是一个容易编写的程序。

该程序必须解释数据包数据中的链路层,IP和TCP或UDP报头,以及NFS的ONC RPC报头,SMB的NetBIOS-over-TCP或SMB-over-TCP报头,AFP的DSI报头以及NFS, SMB和AFP的协议报头。然后,它必须识别查找或打开文件请求,并找出哪些读取和写入请求位于哪些文件上,并根据读取和写入请求中的文件偏移量重新组装正在读取或写入的数据,以获得文件数据。