Как мне читать и записывать необработанные IP-пакеты из Java на Mac?

Каким будет самый простой способ отправлять и получать необработанные сетевые пакеты. Должен ли я писать свою собственную оболочку JNI для некоторого c API, и в этом случае какой API я ищу?

Обновлено: я хочу иметь возможность делать то, что делает wirehark, то есть записывать все входящие пакеты на интерфейсе и, кроме того, иметь возможность отправлять обратно свои собственные созданные пакеты. И я хочу сделать это на Mac.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
3
0
5 816
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

TINI - это Java-контроллер Ethernet, который может иметь библиотеки и классы для прямого доступа к данным из кадров Ethernet в потоки TCP. Возможно, вы сможете найти там что-то, что реализует ваши необходимые классы. В противном случае должны быть указатели или группы пользователей, которые дадут вам фору.

Ответ принят как подходящий

Если вы начнете с идеи, что вам нужно что-то подобно в виде сниффера пакетов, вы захотите взглянуть на http://netresearch.ics.uci.edu/kfujii/jpcap/doc/.

Raw Socket для Java - это запрос на JDK в течение длительного времени. См. Запрос здесь. Там долгое обсуждение, в котором вы можете найти обходные пути и решения. Однажды мне это понадобилось для простой операции PING, но я не могу вспомнить, как я решил это. Извини :)

На данный момент мне лучше всего подходит БНФ api и написать тонкую оболочку JNI.

Вы не можете получить доступ к необработанным сокетам из чистой Java, поэтому вам понадобится какой-то слой между вашим кодом Java и сетевыми интерфейсами.

Также обратите внимание, что доступ к необработанным сокетам обычно доступен только «корневым» процессам, поскольку в противном случае любой пользователь мог бы а) прослушивать весь трафик и б) генерировать поддельные пакеты.

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

Какие-либо независимые от платформы решения?

Pacerier 25.07.2012 10:55

@Pacerier по определению не может быть независимым от платформы, хотя есть библиотеки, которые знают о платформе и скрывают от вас эти зависимости.

Alnitak 25.07.2012 13:18

почему по определению он не может быть независимым от платформы?

Pacerier 25.07.2012 14:24

@Pacerier, потому что каждая платформа имеет разные API для доступа к необработанным сокетам.

Alnitak 25.07.2012 14:27

На каждой платформе есть разные способы выполнения даже большинства вещей, связанных с базовый. Это не значит, что он не может быть независимым от платформы. Я бы сказал, что Java не предоставляет для него платформенно-независимый интерфейс.

Pacerier 25.07.2012 14:31

Другие вопросы по теме