0

ネットワーク経由でトラフィックされたファイルのコンテンツをキャプチャできましたが、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 でファイル名を取得するにはどうすればよいですか?

4

1 に答える 1

1

パケット内のファイル名はどこにありますか?

ファイルの転送に使用されるプロトコルによって異なります。

HTTP の場合は、ファイルを取得するための GET 要求、またはファイルを送信するための PUT または POST にある可能性がありますが、その保証はありません。

FTP の場合は、STOR または RETR コマンドでファイルを送信または取得します。

NFS、SMB、AFP などのファイル アクセス プロトコルの場合は、読み取りまたは書き込みのためにファイルを検索または開くために使用される要求に含まれます。

生のパケットデータには、ファイルの内容ではないものがたくさん含まれていることにも注意してください。ネットワーク トレースからファイル名とコンテンツを取得するプログラムには、おそらく、上記で記述したコードの少なくとも100 倍の量が必要です。簡単に書けるプログラムではありません。

そのプログラムは、パケット データ内のリンク層、IP、および TCP または UDP ヘッダーを解釈する必要があります。また、NFS の ONC RPC ヘッダー、SMB の NetBIOS-over-TCP または SMB-over-TCP ヘッダー、DSI ヘッダーも解釈する必要があります。 AFP の場合はプロトコル ヘッダー、NFS、SMB、および AFP の場合はプロトコル ヘッダーです。次に、ファイルのルックアップまたはオープン要求を認識し、どの読み取り要求と書き込み要求がどのファイルに対するものであるかを把握し、読み取り要求と書き込み要求のファイル オフセットに基づいて、読み取りまたは書き込み中のデータを再構築して、ファイルデータ。

于 2015-07-19T23:41:56.777 に答える