Вы не можете получить доступ к необработанным сокетам из чистой Java, поэтому вам понадобится какой-то слой между вашим Java-кодом и сетевыми интерфейсами.
Также обратите внимание, что доступ к необработанным сокетам обычно доступен только для «корневых» процессов, поскольку в противном случае любой пользователь может и а) прослушивать весь трафик, и б) генерировать поддельные пакеты.
Вместо того, чтобы писать всю свою программу так, чтобы она работала как «root», вы можете рассмотреть возможность захвата и генерации пакетов в отдельной программе с каким-то IPC (RMI, именованный канал, сокет TCP и т. Д.) для обмена данными с вашим Java-приложением.