Блокировка доступа к Интернету через Windows из приложения Win32 - PullRequest
2 голосов
/ 21 февраля 2010

Какой самый простой способ для приложения, которое я пишу, заблокировать весь доступ в Интернет на компьютере с Windows?

Подробнее:

Windows: XP или выше

Приложение: базовое приложение Win32, написанное на C / C ++.

Блокировка: она должна иметь возможность блокировать и разблокировать по желанию, в идеале таким образом, чтобы пользователь не мог легко повернуть вспять. (Например, щелкнув правой кнопкой мыши значок сетевого подключения на панели задач.) Кроме того, в идеале мне бы хотелось, чтобы он использовал метод, позволяющий восстановить доступ, если пользователь перезапустит Windows или перезагрузит компьютер, хотя я бы также будьте готовы автоматически запустить приложение с Windows и разблокировать доступ при запуске, если машина была перезагружена в заблокированном состоянии.

Доступ в Интернет. Прежде всего, я бы хотел запретить обычным браузерам посещать обычные сайты http / https. Во-вторых, было бы неплохо заблокировать IM-клиенты и клиентские приложения для социальных сетей. Также было бы неплохо, но не обязательно, разрешить локальную сеть для обмена файлами и т. Д. (Обратите внимание, что только первое требование является абсолютным.)

Заключительные замечания: Это не означает, что это утилита безопасности, и ее отношения с пользователем не будут состязательными (как, например, с утилитой родительского контроля), поэтому для нее не важно использовать схему, которая может ' не может быть решен определенным пользователем. (Учтите, что я намерен выполнить перезагрузку или сброс, чтобы снять блокировку. Это означает, что любой обходной путь, который может обнаружить пользователь, потребует больше усилий, чем это нормально.)

Спасибо!

p.s. Я подозреваю, что API брандмауэра Windows не будет работать для меня, потому что это должно работать для пользователей, которые не включили брандмауэр или не имеют прав администратора, но я буду рад, если я исправлю это.

Ответы [ 4 ]

2 голосов
/ 21 февраля 2010

Вы можете сделать это с Winsock SPI . Windows SDK имеет образец (в разделе Samples \ netds \ winsock \ lsp), который реализует так называемый многоуровневый поставщик услуг, который позволяет подключать все функции пользовательского режима, предоставляемые Winsock, и отклонять / изменять вызовы заблокировать доступ к сети или перенаправить трафик в разные места. Будут затронуты все установленные приложения winsock, так что в вашем коде вы можете указать, какие приложения могут выходить и т.п., а также отключать / включать на лету. Теперь решительный человек может найти способ обойти это, но это будет боль.

Тем не менее, это не тривиально , но образец должен помочь вам в этом.

2 голосов
/ 21 февраля 2010

Похоже, вы собираетесь запускать приложения, которые не хотят для доступа в Интернет. Возможно, вы могли бы запустить их на виртуальной машине, такой как VirtualBox, с отключенной сетью.

1 голос
/ 21 февраля 2010

Вы не можете эффективно или практически написать свой инструмент только с приложением пользовательского режима.

Что вам нужно написать, так это драйвер фильтра стека сетевого ввода-вывода. Это делается путем написания драйвера Windows. Это отличается от приложения Windows Win32. Драйверы работают в режиме ядра, а приложения - в режиме пользователя.

В Windows Vista и более поздних версиях для этого предназначен интерфейс сетевого программирования (NPI) в режиме ядра. Это тот же API, который используют брандмауэры Windows. Их иногда называют API-интерфейсами ядра Winsock (WSK).

По сути, вы пишете сетевой брандмауэр (более или менее)

вот несколько ссылок

Обратите внимание, вам, скорее всего, понадобится как минимум два компонента

  1. Ваш водитель
  2. Графическое приложение, которое человек может использовать для управления вашим инструментом

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

Несколько заметок:

  1. Вы должны очень внимательно относиться к безопасности при написании такого рода программного обеспечения. Это очень нетривиально. Программное обеспечение для работы в сети предъявляет самые высокие требования к безопасности.
  2. Будьте осведомлены о производительности.
  3. Ваш драйвер и / или служба должны знать контекст вызывающего приложения. Это также граница безопасности. Например, приложение, не работающее от имени администратора, не должно иметь возможности управлять вашим драйвером.
0 голосов
/ 21 февраля 2010

взгляните на исходные коды брандмауэра

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