@MrJonsonKimberg

Где ошибка в коде c#?

Добрый день! Помогите, столкнулся с проблемой, с с# прежде не работал, понадобилось написать сниффер трафика, выбор пал на fiddlerCore. В сети нашел статью https://weblog.west-wind.com/posts/2014/jul/29/usi... начал делать все как в ней, установил саму библиотеку, успешно подключил. После начал пытаться сделать хоть что-то рабочее. Перенес функции из статьи в файл (что получилось ниже)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Fiddler;

namespace SKIE{
    class Program{
        private void FiddlerApplication_AfterSessionComplete(Session sess)
        {
            // Ignore HTTPS connect requests
            if (sess.RequestMethod == "CONNECT")
                return;

            if (CaptureConfiguration.ProcessId > 0)
            {
                if (sess.LocalProcessID != 0 && sess.LocalProcessID != CaptureConfiguration.ProcessId)
                    return;
            }

            if (!string.IsNullOrEmpty(CaptureConfiguration.CaptureDomain))
            {
                if (sess.hostname.ToLower() != CaptureConfiguration.CaptureDomain.Trim().ToLower())
                    return;
            }

            if (CaptureConfiguration.IgnoreResources)
            {
                string url = sess.fullUrl.ToLower();

                var extensions = CaptureConfiguration.ExtensionFilterExclusions;
                foreach (var ext in extensions)
                {
                    if (url.Contains(ext))
                        return;
                }

                var filters = CaptureConfiguration.UrlFilterExclusions;
                foreach (var urlFilter in filters)
                {
                    if (url.Contains(urlFilter))
                        return;
                }
            }

            if (sess == null || sess.oRequest == null || sess.oRequest.headers == null)
                return;

            string headers = sess.oRequest.headers.ToString();
            var reqBody = sess.GetRequestBodyAsString();

            // if you wanted to capture the response
            //string respHeaders = session.oResponse.headers.ToString();
            //var respBody = session.GetResponseBodyAsString();

            // replace the HTTP line to inject full URL
            string firstLine = sess.RequestMethod + " " + sess.fullUrl + " " + sess.oRequest.headers.HTTPVersion;
            int at = headers.IndexOf("\r\n");
            if (at < 0)
                return;
            headers = firstLine + "\r\n" + headers.Substring(at + 1);

            string output = headers + "\r\n" +
                            (!string.IsNullOrEmpty(reqBody) ? reqBody + "\r\n" : string.Empty) +
                            Separator + "\r\n\r\n";

            BeginInvoke(new Action<string>((text) =>
            {
                txtCapture.AppendText(text);
                UpdateButtonStatus();
            }), output);

        }
        void Start()
        {
            if (tbIgnoreResources.Checked)
                CaptureConfiguration.IgnoreResources = true;
            else
                CaptureConfiguration.IgnoreResources = false;

            string strProcId = txtProcessId.Text;
            if (strProcId.Contains('-'))
                strProcId = strProcId.Substring(strProcId.IndexOf('-') + 1).Trim();

            strProcId = strProcId.Trim();

            int procId = 0;
            if (!string.IsNullOrEmpty(strProcId))
            {
                if (!int.TryParse(strProcId, out procId))
                    procId = 0;
            }
            CaptureConfiguration.ProcessId = procId;
            CaptureConfiguration.CaptureDomain = txtCaptureDomain.Text;

            FiddlerApplication.AfterSessionComplete += FiddlerApplication_AfterSessionComplete;
            FiddlerApplication.Startup(8888, true, true, true);
        }
        void Stop()
        {
            FiddlerApplication.AfterSessionComplete -= FiddlerApplication_AfterSessionComplete;

            if (FiddlerApplication.IsStarted()) 
                FiddlerApplication.Shutdown();

        }

        static void Main(string[] args){

        }
    }
}


Попытался скомпилировать и на меня посыпалось десяток ошибок, они ниже:

1>------ Сборка начата: проект: Test, Конфигурация: Debug Any CPU ------
1>C:\Users\CJ\documents\visual studio 2015\Projects\Test\Test\Program.cs(16,17,16,37): error CS0103: Имя "CaptureConfiguration" не существует в текущем контексте.
1>C:\Users\CJ\documents\visual studio 2015\Projects\Test\Test\Program.cs(18,72,18,92): error CS0103: Имя "CaptureConfiguration" не существует в текущем контексте.
1>C:\Users\CJ\documents\visual studio 2015\Projects\Test\Test\Program.cs(22,39,22,59): error CS0103: Имя "CaptureConfiguration" не существует в текущем контексте.
1>C:\Users\CJ\documents\visual studio 2015\Projects\Test\Test\Program.cs(24,48,24,68): error CS0103: Имя "CaptureConfiguration" не существует в текущем контексте.
1>C:\Users\CJ\documents\visual studio 2015\Projects\Test\Test\Program.cs(28,17,28,37): error CS0103: Имя "CaptureConfiguration" не существует в текущем контексте.
1>C:\Users\CJ\documents\visual studio 2015\Projects\Test\Test\Program.cs(32,34,32,54): error CS0103: Имя "CaptureConfiguration" не существует в текущем контексте.
1>C:\Users\CJ\documents\visual studio 2015\Projects\Test\Test\Program.cs(33,37,33,47): error CS1579: Оператор foreach не работает с переменными типа "?", так как "?" не содержит открытого определения для "GetEnumerator".
1>C:\Users\CJ\documents\visual studio 2015\Projects\Test\Test\Program.cs(39,31,39,51): error CS0103: Имя "CaptureConfiguration" не существует в текущем контексте.
1>C:\Users\CJ\documents\visual studio 2015\Projects\Test\Test\Program.cs(40,43,40,50): error CS1579: Оператор foreach не работает с переменными типа "?", так как "?" не содержит открытого определения для "GetEnumerator".
1>C:\Users\CJ\documents\visual studio 2015\Projects\Test\Test\Program.cs(66,29,66,38): error CS0103: Имя "Separator" не существует в текущем контексте.
1>C:\Users\CJ\documents\visual studio 2015\Projects\Test\Test\Program.cs(70,17,70,27): error CS0103: Имя "txtCapture" не существует в текущем контексте.
1>C:\Users\CJ\documents\visual studio 2015\Projects\Test\Test\Program.cs(71,17,71,35): error CS0103: Имя "UpdateButtonStatus" не существует в текущем контексте.
1>C:\Users\CJ\documents\visual studio 2015\Projects\Test\Test\Program.cs(68,13,68,24): error CS0103: Имя "BeginInvoke" не существует в текущем контексте.
1>C:\Users\CJ\documents\visual studio 2015\Projects\Test\Test\Program.cs(77,17,77,34): error CS0103: Имя "tbIgnoreResources" не существует в текущем контексте.
1>C:\Users\CJ\documents\visual studio 2015\Projects\Test\Test\Program.cs(78,17,78,37): error CS0103: Имя "CaptureConfiguration" не существует в текущем контексте.
1>C:\Users\CJ\documents\visual studio 2015\Projects\Test\Test\Program.cs(80,17,80,37): error CS0103: Имя "CaptureConfiguration" не существует в текущем контексте.
1>C:\Users\CJ\documents\visual studio 2015\Projects\Test\Test\Program.cs(82,32,82,44): error CS0103: Имя "txtProcessId" не существует в текущем контексте.
1>C:\Users\CJ\documents\visual studio 2015\Projects\Test\Test\Program.cs(94,13,94,33): error CS0103: Имя "CaptureConfiguration" не существует в текущем контексте.
1>C:\Users\CJ\documents\visual studio 2015\Projects\Test\Test\Program.cs(95,13,95,33): error CS0103: Имя "CaptureConfiguration" не существует в текущем контексте.
1>C:\Users\CJ\documents\visual studio 2015\Projects\Test\Test\Program.cs(95,50,95,66): error CS0103: Имя "txtCaptureDomain" не существует в текущем контексте.
========== Сборка: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========

Что делать? Как заставить сие чудо работать? Извиняюсь за нубские вопросы, просто с сей технологией дел не имел (c#). Буду благодарен любой помощи и совету.
  • Вопрос задан
  • 1135 просмотров
Пригласить эксперта
Ответы на вопрос 2
@SZolotov
Asp.net core, MAUI,WPF,Qt, Avalonia
1>C:\Users\CJ\documents\visual studio 2015\Projects\Test\Test\Program.cs(95,13,95,33): error CS0103: Имя "CaptureConfiguration" не существует в текущем контексте.


Черным по белому же. Переменные объявлять нужно.
Ответ написан
Комментировать
В конце статьи приведено
public FiddlerCapture(StressTestForm form)
{
    InitializeComponent();
    CaptureConfiguration = App.Configuration.UrlCapture;
    MainForm = form;

    if (!string.IsNullOrEmpty(App.Configuration.UrlCapture.Cert))
    {
        FiddlerApplication.Prefs.SetStringPref("fiddler.certmaker.bc.key", App.Configuration.UrlCapture.Key);
        FiddlerApplication.Prefs.SetStringPref("fiddler.certmaker.bc.cert", App.Configuration.UrlCapture.Cert);
    }
}

Судя по всему ваш класс правильно назвать FiddlerCapture и вставить этот конструктор
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы