Брандмауэр Windows XP блокирует входящие UDP-пакеты: программное исключение для Java-программы или обходной путь? - PullRequest
1 голос
/ 01 января 2012

У меня есть программа на Java, которая взаимодействует с другими программами в сети с использованием пакетов UDP. Я заметил, что на моей машине с Windows XP я не мог получать входящие пакеты, и после некоторых исследований я выяснил, что это был брандмауэр, вызывающий проблему.

Есть ли способ добавить исключение брандмауэра для Java-программы? Google ничего не показывает для этого.

Есть ли команда оболочки DOS, которую я могу запустить во время установки, которая добавит исключение? (Также не могу найти что-либо в Google для этого.)

Есть ли способ обойти это так, чтобы Windows знала, что входящие пакеты запрашиваются? Например, я отправляю широковещательный пакет, а затем другие системы отвечают. Что я могу сделать в отношении того, какие порты я использую для широковещательной передачи, которые позволят пакет ответа?

Есть ли совершенно другой способ получения ответа? Мне все еще нужно вещать, потому что это будет выполняться в сетях, которые не обязательно даже имеют DNS, поэтому я не могу полагаться на такие вещи, как Zeroconf (не говоря уже о том, что для Java не существует хорошей поддержки Zeroconf) для обнаружения другие машины в сети.

Спасибо.

1 Ответ

3 голосов
/ 10 января 2012

В отношении брандмауэра следует учитывать три аспекта:

  1. Самый простой способ «открыть» порт в брандмауэре - это заставить программу за брандмауэром отправлять дейтаграммусвоему пэру.Это (обычно) создает временное правило, позволяющее возвращать дейтаграммы от партнера в локальную программу.Тем не менее, Windows Vista и Windows 7 будут делать это только в том случае, если локальной программе было разрешено общаться в сети.При первом запуске программы появится диалоговое окно с вопросом, разрешить ли ей общаться с сетью.Если вы щелкнете что-либо, кроме «Разрешить доступ», программа будет заблокирована навсегда.

  2. Лучший способ для пользователя с правами администратора - открыть любой номер порта (ов) вручную.программа прослушивает и / или отправляет сообщение.

  3. Даже если вы открываете порт, некоторые брандмауэры могут по-прежнему блокировать ваши дейтаграммы.Это может произойти из-за чего-то столь же непонятного, как первые несколько байтов вашей полезной нагрузки, совпадающие с неким шаблоном, который не нравится брандмауэру.Например, Symantic Antivirus может блокировать любую дейтаграмму UDP
    , чьи первые несколько байтов равны 0x20 0x01 0x00 0x00, поскольку он предполагает, что это туннель Teredo.Аналогично, если ваши дейтаграммы на несколько байтов больше, чем MTU пути, некоторые брандмауэры увидят небольшой фрагмент IP и отбросят его, чтобы предотвратить древний вектор атаки DoS.

Моя рекомендациявыберите между 1 или 2, в зависимости от потребностей вашего приложения, и старайтесь избегать 3, задав для первых нескольких байтов каждой дейтаграммы постоянное значение и оставив свои дейтаграммы ниже 1400 байт.

...