Использование объекта TCPClient для проверки того, блокирует ли сам брандмауэр Windows трафик на входящий порт, не работает - PullRequest
2 голосов
/ 19 октября 2011

Положение:

Я использую объект .NET TcpClient, чтобы проверить, закрыт ли входящий порт 5900 VNC на моем ПК:

TcpClient tcpClient = new TcpClient ("localhost", 5900);

Это нормально работает, когда я проверяю, закрыт ли входящий порт сторонним программным обеспечением брандмауэра на моем ПК. В этом случае возникает исключение, когда порт действительно закрыт, и я могу его поймать.

Проблема:

Но когда я включаю сам брандмауэр Windows, этот метод не работает, потому что создание соединения всегда успешно. Исключение, которое я только что упомянул, никогда не встречается в этом случае.

Я также проверил это, создав сеанс telnet на локальном хосте через порт 5900. Этот сеанс не удается, если вы используете сторонний брандмауэр для блокировки трафика на входящий порт 5900. Этот сеанс telnet завершается успешно при использовании самого брандмауэра Windows для блокировки трафика.

Как и ожидалось, создание соединения VNC с другого компьютера через порт 5900 не удается, если включен брандмауэр Windows (это означает, что брандмауэр работает так, как я его настроил).

Вопросы:

  1. Кто-нибудь знает, почему брандмауэр Windows работает на уровне, отличном от брандмауэров сторонних производителей?
  2. Есть ли простой способ решить эту проблему? Я бы предпочел не использовать API брандмауэра Windows, потому что тогда я должен учитывать разные версии ОС (разные API для XP и Win7)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...