Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Jpcap / разобрать пакет 
V
    Опции темы
6pblcb
Дата 12.3.2010, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 12.3.2010

Репутация: нет
Всего: нет



Доброго времени суток. smile  Пишу диплом. Задание примерно такое: написать прогу отлавливающую пакеты приходящие на наш комп, и анализируя эти пакеты (порты, IP) прога делает некие действия. Язык программирования был выбран Java, а библиотеку для реализации посоветовали jpcap. На английском к сожалению не шпрехаю, а все документация и примеры про jpcap именно на нём. Юзая гугловский переводчик кое как разобрался как перехватывать пакеты, а вот как их разбирать не понимаю.

Буду очень рад всему что есть про jpcap, а ещё больше рад примерам(для меня проще всего разобраться именно на примере, а не сухой теории). smile 

зы: на Java "программирую" уже цельных 6 часов  =\\
PM MAIL   Вверх
Vladus
Дата 12.3.2010, 19:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 108
Регистрация: 1.2.2008

Репутация: нет
Всего: 4



Цитата

а вот как их разбирать не понимаю.

А что вы понимаете под разбором пакетов?

ну вот тривиальный паврсинг пакета, если я вас правильно понимаю
Код

         /* return packet data in true text */
         String getPacketText(Packet pack){
               int i=0,j=0;
               byte[] bytes=new byte[pack.header.length + pack.data.length];
                   
                  System.arraycopy(pack.header, 0, bytes, 0, pack.header.length);
                  System.arraycopy(pack.data, 0, bytes, pack.header.length, pack.data.length);
                  StringBuffer buffer = new StringBuffer();
                   
                  for(i=0; i<bytes.length;) {
                      for(j=0;j<8 && i<bytes.length;j++,i++) {
                          String d = Integer.toHexString((int)(bytes [i] &0xff));
                          buffer.append((d.length() == 1 ? "0" + d:d ) + " ");
                       
                      if(bytes[i]<32 || bytes[i]>126)
                          bytes[i] = 46;
                         }
               }
                   return new String(bytes,i - j, j);
               }

а вообще имхо :
1) ява не годится для низкоуровневых сетевых приложений (к которым по всей видимости относится ваша задача)
2) при моем небольшом опыте знакомства с jpcap я все таки натолкнулся на одни существенные грабли на 64х битной операционке 
PM MAIL   Вверх
6pblcb
Дата 15.3.2010, 16:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 12.3.2010

Репутация: нет
Всего: нет



Цитата

А что вы понимаете под разбором пакетов?

К примеру:
Код

NetworkInterface[] devices = JpcapCaptor.getDeviceList();   //получаем список сет. инетерфейсов
JpcapCaptor captor=JpcapCaptor.openDevice(devices[2], -1, false, 0);   //открываем интерфейс            
Packet packet;
packet = captor.getPacket();     //получаем пакет
System.out.println(packet.header);     //выводим данные
System.out.println(packet.toString());     //весь пакет
captor.close();


Т.е. "захватываем" 1 пакет и выводим сначала только его данные, затем всякие заголовки типа мас, IP, порты и т.д.
В классе Packet не предусмотрен вывод допустим исходящего порта.

А вот в классе TCPPacket это возможно. Вот описание класса TCPPacket.
Но что то я не могу понять как этим воспользоваться. Т.е. как сделать то же самое что у меня в примере только для TCPPacket.

зы: я знаю что я туплю)
Цитата

а вообще имхо :
1) ява не годится для низкоуровневых сетевых приложений (к которым по всей видимости относится ваша задача)

зы2: после нескольких часов копания в инете на тему диплома, Я тоже так подумал. Но к сожалению задачи ставлю не Я, и вдобавок было интересно что такое Java и как её готовить.)
зы3: к сожалению абсолютно не понял ваш пример кода, 
Цитата
 паврсинг пакета 
 даже это не понял *покраснел*  smile 
PM MAIL   Вверх
Vladus
Дата 18.3.2010, 01:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 108
Регистрация: 1.2.2008

Репутация: нет
Всего: 4



Цитата

А вот в классе TCPPacket это возможно.

так в конечном счете TCPPacket является наследником Packet -а
Код

public class TCPPacket extends jpcap.packet.IPPacket {
...

Код

public class IPPacket extends jpcap.packet.Packet {
...

так что можете смело кастить
Код

Packet info = captor.getPacket();
TCPPacket tcpPacket = (TCPPacket) info;
...

ну а далее у TCPPacket-а можно позабирать кое какие данные.

теперь я вас правильно понял?  smile 
PM MAIL   Вверх
6pblcb
Дата 21.3.2010, 18:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 12.3.2010

Репутация: нет
Всего: нет



Да, огромное спасибо!!! smile Я был прав что я туплю) Всего то 1 строчка. 
Сразу не ответил, думал что ещё какие то вопросы возникнут, но тьфу тьфу тьфу все нормально. "Сниффер" уже во всю пишет логи) Осталось 2 проги и диплом готов)

Ещё раз спасибо. smile
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Работа с сетью | Следующая тема »


 




[ Время генерации скрипта: 0.0816 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.