Обычно это делается с помощью отдельного брандмауэра (например, в маршрутизаторе или шлюзе) или программного обеспечения брандмауэра, запущенного на одном или обоих клиентских компьютерах.
Это не та вещь, которую разумно реализовать в Java.
РЕДАКТИРОВАТЬ - в ответ на это продолжение
Я знаю, что такая вещь не рекомендуется в Java .. но все же я должен ее реализовать .. так есть ли какие-либо способы сделать это ..?
Допустим, вы говорите о реализации клиентского брандмауэра на компьютере с Linux. Я могу думать о двух подходах:
Вы можете использовать Process.execute()
и друзей для запуска утилиты администратора iptables(8)
Linux, которая управляет сетевыми фильтрами пакетов ядра ОС. Это самый простой подход на основе Java. Но для этого требуется, чтобы ваше Java-приложение работало как root
.
Вы можете перепроектировать то, что iptables(8)
делает для манипулирования фильтрами пакетов и кодировать те же функции в Java. Это будет больше работы по кодированию, включая реализацию части функциональности в C через JNI или JNA. И ваше приложение должно работать как root
.
Но гораздо более простой подход состоит в том, чтобы просто запустить iptables(8)
из командной строки или внести изменения, используя причудливые инструменты администратора на основе графического интерфейса.
Обратите внимание, что в приведенных выше сценариях сам брандмауэр не реализован в Java. Все, что вы делаете, это администрирование брандмауэра из приложения Java. Я не могу придумать ЛЮБОГО способа фактически выполнить фильтрацию / блокировку в Java, который даже отдаленно практичен.