0

私は Wireshark を実行してスニッフィングを開始するビルド アプリケーションです。Wireshark には、引数 (インターフェイス番号、出力ファイルなど) を受け取ってスニッフィングを開始する dumpcap.exe ファイルがあり、その間、cmd ウィンドウでパケットの数とこの数がすべて増加していることを確認できます。時間。私の質問は、アプリケーション ウィンドウにこの番号を表示するために、この番号を数秒ごとに取得するにはどうすればよいかということです。

これは、このスニッフィングを開始する私のクラスです:

public class DumpPcap
{
    public int _interfaceNumber;
    public string _pcapPath;
    public string _dumPcapPath = @"C:\Program Files\Wireshark\dumpcap.exe";

    public DumpPcap(int interfaceNumber, string pcapPath)
    {
        _interfaceNumber = interfaceNumber;
        _pcapPath = pcapPath;
    }

    public void startTheCapture()
    {
        List<string> stList = new List<string>();
        ProcessStartInfo process = new ProcessStartInfo(_dumPcapPath);
        process.Arguments = string.Format("-i " + _interfaceNumber + " -s 65535 -w " + _pcapPath);
        process.WindowStyle = ProcessWindowStyle.Hidden;
        process.RedirectStandardOutput = true;
        process.RedirectStandardError = true;
        process.CreateNoWindow = true;
        process.UseShellExecute = false;
        process.ErrorDialog = false;
        Process dumpcap = Process.Start(process);
        StreamReader reader = dumpcap.StandardOutput;
        //dumpcap.WaitForExit(100000);

        while (!reader.EndOfStream)
        {
            stList.Add(reader.ReadLine());
        }
    }
}

これはスクリーンショットで、アプリケーションに表示したいフィールドを赤でマークしました:

http://image.torrent-invites.com/images/641Untitled.jpg

4

1 に答える 1

0

から出力テキストを取得しようとする代わりに、ProcessStartInfoからそれを実行し、イベント ハンドラーProcessを介して出力データをインターセプトするのはどうですか?OutputDataReceived

コード ブロックを次のように置き換えてみてください。

List<string> stList = new List<string>();

var process = new Process();
process.StartInfo.FileName = _dumPcapPath;
process.StartInfo.Arguments = 
    string.Format("-i " + _interfaceNumber + " -s 65535 -w " + _pcapPath);
process.Startinfo.WindowStyle = ProcessWindowStyle.Hidden;
process.Startinfo.RedirectStandardOutput = true;
process.Startinfo.RedirectStandardError = true;
process.Startinfo.CreateNoWindow = true;
process.Startinfo.UseShellExecute = false;
process.Startinfo.ErrorDialog = false;

// capture the data received event here...
process.OutputDataReceived += 
    new DataReceivedEventHandler(process_OutputDataReceived);

process.Start();
process.BeginOutputReadLine();


private void process_OutputDataReceived(object sender, DataReceivedEventArgs arg)
{
    // arg.Data contains the output data from the process...
}

注: コンパイルや深刻な検証を行わずにこれを入力しただけなので、注意してください、LOL...

于 2012-09-24T18:03:24.097 に答える