LINUX.ORG.RU

расшифровка TCP-пакета

 , ,


0

1

Собственно, перехвачена сессия передачи данных по протоколу TCP

2 клиента обмениваются строками, нужно это строки вытащить из пакетов

перехват через wireshark

Скрин сессии

«Follow TCP Stream» дает следующие результаты, я так понимаю из-за нестандартной кодировки передаваемого сообщения(ее по заданию тоже надо выяснить) идет проблема с отображением

ASCII HEX Dump UTF-8

В общем, что делать?


идет проблема с отображением

Нет проблем с отображением. Это действительно такие данные передаются.

i-rinat ★★★★★
()
Ответ на: комментарий от dmanev

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

i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat

страна происхождения программы-мой преподаватель

мы сами генерируем эти запросы через jar и ловим, на виртуалках...

проблема в программе, в ней ошибка, строку человеческую не получить...

dmanev
() автор топика
Ответ на: комментарий от i-rinat

понял, собственно все встало на свои места

код не мой-преподавателя, поэтому понять где ошибка нелегко, предполагаю, что где-то здесь...

package edu;

import java.util.Map;

public class Dictionary
{
  Map<Integer, String> dict;
  
  public void setDict(Map<Integer, String> dict)
  {
    this.dict = dict;
  }
  
  private String encodeAnswer(String s)
  {
    try
    {
      return new String(s.getBytes("cp1251"), "utf-8");
    }
    catch (Exception e) {}
    return s;
  }
  
  private int normalize(int index)
  {
    if (index < 0) {
      return -index;
    }
    return index;
  }
  
  public String getWord(int index)
  {
    return this.dict != null ? encodeAnswer((String)this.dict.get(Integer.valueOf(normalize(index % this.dict.size())))) : "0";
  }
}

dmanev
() автор топика
Ответ на: комментарий от dmanev
return new String(s.getBytes("cp1251"), "utf-8");

Мой тебе совет — беги оттуда, и побыстрее. Если преподаватель допускает такие ошибки, ему не стоит доверять своё обучение.

Тут в коде из строки s делается строка байт, символы кодируются в cp1251. Потом из этих байт инициализируется новая строка, причём полагается, что это строка в utf-8. Конечно же при попытке декодирования таких байт возникают ошибки на каждом. Таких последовательностей в UTF-8 быть не может. Хорошо работают только байты в ASCII диапазоне, там UTF-8 совпадает с cp1251.

Есть ещё шанс, что ошибка была сделана специально, а твоя задача была в том, чтобы её найти. Тогда уже ты не справился. :-)

i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat

Очень надеюсь, что именно так и есть(ошибку надо было найти), а то как-то обидно слегка получать такие вещи на магистратуре...

я немного обошел ситуацию, класс проверки строки из ярника вытащил вместе со словарями(словари на русском, совсем неприятно было) и собственно строку то получил, но сам факт недоделанного кода меня немного расстраивает...

тем более, что курс по предотвращениям вторжений, по факту к java ни коем образом не относится, больше к сетям...

dmanev
() автор топика
Ответ на: комментарий от dmanev

а то как-то обидно слегка получать такие вещи на магистратуре...

Ой, да ладно. У нас на магистратуре некоторые преподы лекции «читали с листка», при этом полностью не понимали выкладываемый ими же предмет...

atsym ★★★★★
()
Последнее исправление: atsym (всего исправлений: 1)
Ответ на: комментарий от dmanev

тем более, что курс по предотвращениям вторжений, по факту к java ни коем образом не относится, больше к сетям...

У меня как-то плохо это в голове укладывается. Если преподаватель допускает такие ляпы в коде, сложно верить, что остальное он правильно рассказывает.

i-rinat ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.