Как создать простой c / http монитор / блокировщик? - PullRequest
7 голосов
/ 29 мая 2009

Я читал этот вопрос ( Как создать простой прокси в C #? ), который близок к моим желаниям.

Я просто хочу разработать приложение на c #, которое, например, отслеживает Firefox, IE и т. Д. И регистрирует все перемещаемые страницы. В зависимости от посещенной страницы, я хочу заблокировать сайт (как родительский фильтр).

Фрагменты кода / примеры хороши, но если вы просто скажете мне, как использовать эти классы, я буду благодарен. : -)

Ответы [ 2 ]

18 голосов
/ 09 июня 2009

Я отвечу для родителей: аля "Родительский контроль"

Вы можете начать с прокси-сервера, когда детям менее 10 лет. После этого они выяснят, как обойти прокси (или запустят свои собственные клиентские приложения, которые обходят прокси). В ранние подростковые годы вы можете использовать сырые розетки. Введите эту программу в Visual Studio (C #).

class Program
{
    static void Main(string[] args)
    {
        try
        {
            byte[] input = BitConverter.GetBytes(1);
            byte[] buffer = new byte[4096];
            Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.IP);
            s.Bind(new IPEndPoint(IPAddress.Parse("192.168.1.91"), 0));
            s.IOControl(IOControlCode.ReceiveAll, input, null);

            int bytes = 0;
            do
            {
                bytes = s.Receive(buffer);
                if (bytes > 0)
                {
                    Console.WriteLine(Encoding.ASCII.GetString(buffer, 0, bytes));
                }
            } while (bytes > 0);
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex);
        }
    }
}

Обратите внимание, что это всего лишь «фрагмент», в котором отсутствует соответствующий дизайн и проверка ошибок. [Пожалуйста, не используйте «как есть» - вы запросили только начальный шаг] Измените IP-адрес своей машины. Запустите программу Администратор AS (используйте «runas» в командной строке или щелкните правой кнопкой «Запуск от имени администратора»). Только администраторы могут создавать и использовать необработанные сокеты в современных версиях Windows. Расслабьтесь и посмотрите шоу.

Весь сетевой трафик доставляется по вашему коду (отображается на экране, который не будет хорошо смотреться с этой программой).

Ваш следующий шаг - создать несколько протокольных фильтров. Узнайте о различных протоколах интернет-приложений (если вы еще не знаете), измените программу для проверки пакетов. Найдите протокол HTTP и сохраните соответствующие данные (например, запросы GET).

У меня лично есть фильтры для AIM (AOL Instant Messenger), HTTP, MSN Messenger (Windows Live Messenger), POP и SMTP. Сегодня HTTP получает практически все, потому что дети сейчас предпочитают стену на Facebook AIM.

По мере того, как дети достигают подросткового возраста в раннем и среднем возрасте, вы захотите отстать от наблюдения. Некоторые говорят, что это позволяет детям «расти», но настоящая причина в том, что « вы не хотите знать ». Я отказался от сбора URL-адресов запросов на получение и имен пользователей / паролей (для экстренных ситуаций) в виде открытого текста (pop, basic auth и т. Д.).

Я не знаю, что происходит в последние подростковые годы; Я не могу представить, что все становится намного хуже, но мне говорят, что «я еще ничего не видел».

Как кто-то ранее сказал, это работает только при запуске на целевой машине (я запускаю копию на всех машинах в доме). В противном случае, для простого мониторинга проверьте ваш роутер - у меня есть несколько приятных функций регистрации.

Мой последний комментарий заключается в том, что это приложение должно быть написано на C / C ++ для Win32 API напрямую и установлено как служба, работающая с правами администратора на компьютере. Я не думаю, что этот тип кода подходит для управляемого C #. Вы можете прикрепить пользовательский интерфейс в C # для мониторинга и контроля. Вы должны разработать код так, чтобы он не оказывал заметного влияния на систему.

7 голосов
/ 29 мая 2009

Ваш подход будет зависеть от того, устанавливаете ли вы это приложение на тот же ящик, который используете для просмотра, или на отдельном прокси-сервере.

Если вы делаете это на отдельном сервере, это будет проще сделать в C # / управляемом коде, так как вы будете просто писать прокси-сервер C #, на который будут указывать клиентские ПК. Пространство имен System.Net.Sockets TcpListener и TcpClient станут вашими друзьями.

Если, однако, вы устанавливаете это на той же машине, посмотрите WinPcap и SharpPCap и, возможно, Fiddler для некоторых идей

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...