Как определить, использует ли полученный пакет TCP или UDP, а в java - jpcap? - PullRequest
1 голос
/ 28 февраля 2012

Я хочу проанализировать полученный пакет в TCPPacket или UDPPacket, но если я напишу "TCPPacket pac3 = (TCPPacket) package;" для пакета, который использует UDP в качестве протокола транспортного уровня, то я получаю исключение "Исключение в потоке" main "java.lang.ClassCastException: jpcap.packet.UDPPacket не может быть приведен к jpcap.packet.TCPPacket"

Как я могу определить, использует ли мой полученный пакет TCP или UDP? На самом деле я хочу получить номера портов из полученного пакета.

Ответы [ 3 ]

1 голос
/ 28 февраля 2012

Очевидный ответ на ваш вопрос - использовать оператор instanceof:

if (packet instanceof TCPPacket) {
    TCPPacket pac3 = (TCPPacket)packet;
    // ...
}

Но это немного вонючий. Я не знаю API JPCAP, но я бы посмотрел, есть ли какой-нибудь вызов API, который вы можете сделать, чтобы спросить пакет его типа. Или, может быть, вы можете настроить два разных механизма (каналы, сокеты, обратные вызовы ???) для раздельного получения UDP и TCP, чтобы вы знали разницу?

0 голосов
/ 28 февраля 2012

Похоже, что нет метода, основанного на API, который вы можете вызвать. Если бы он был, он был бы в родительском классе пакетов, , который находится здесь.

Как правило, такого рода вещи будут рассматриваться в потоках, где у вас есть поток TCP или поток UDP. Но, к сожалению, нет.

Вы должны быть в состоянии положиться на instanceof, но очевидно, что api reliance предпочтительнее, чем instanceof.

Другой вариант - использовать метод header(). Похоже, что протокол хранится в заголовке IP, к которому у вас должен быть доступ. Эта страница , по-видимому, иллюстрирует заголовок IP, и что 6 будет номером протокола TCP, а 17 - UDP.

Фактически, константы jpcap.Packet.IPPROTO_TCP и jpcap.Packet.IPPROTO_UDP, вероятно, соответствуют этим значениям. Похоже, вам лучше всего разобрать заголовок.

0 голосов
/ 28 февраля 2012

Может быть, вы можете использовать оператор instanceof в java для определения типа пакета.

...