



Вы можете просто открыть /dev/socket как InputStream и прочитать данные, поступающие в сокет.
На уровне операционной системы вам потребуется необработанные сокеты для доступа к заголовкам IP-уровня. Но, к счастью, в чистой Java нет необработанных сокетов, поэтому вам нужен собственный код для выполнения соответствующих системных вызовов.
Существуют библиотеки Java, которые используют компонент JNI для собственных вызовов. Один пример (который я успешно использовал в прошлом) — каменная пила.