Есть ли способ (в Java) читать заголовки IP-уровня (меня интересуют src & dst IP), используя сокет TCP или UDP?
Я знаю, что возможно использовать pcap (захват пакета), но я не нашел способа сделать это с помощью сокетов. В чем причина этого?
pcap
На уровне операционной системы вам нужно raw сокеты для доступа к заголовкам IP-уровня. Но, к счастью, чистые сокеты не существуют в чистой Java, поэтому вам необходим собственный код для создания соответствующих системных вызовов.
Существуют библиотеки Java, которые используют компонент JNI для собственных вызовов. Одним из примеров (который я успешно использовал в прошлом) является Rocksaw .
Вы можете просто открыть / dev / socket как InputStream и прочитать данные, поступающие в сокет.