SKART1 / GEOTRACERT

Server and client (web front) for geotracert service
Other
6 stars 0 forks source link

Проверка работоспособности парсинга #57

Closed SKART1 closed 10 years ago

SKART1 commented 10 years ago

@dm-kiselev проблемы с парсингом. Предлагаю следующий способ отладки 1). Открывай cmd/terminal (лучше cmd) 2). Вводи tracert 93.158.134.3 3). Сверяйся чтобы парсились строчки ответы, но не служебная информаия типа: "Трассировка маршрута к www.yandex.ru [93.158.134.3] с максимальным числом прыжков 30:"

4). Вот шаблон ответа для windows Как видишь корректных строках есть 3 цифры и только потом 1 2 ms <1 мс <1 мс 192.168.1.1 2 <1 мс <1 мс 1 ms 10.50.9.100 3 1 ms <1 мс <1 мс bgp1.unet.ws [91.192.191.145] 4 <1 мс <1 мс <1 мс bgp7.unet.ws [91.192.191.147] 5 1 ms 1 ms 1 ms aurora-vlan601.yndx.net [213.180.213.129] 6 1 ms 1 ms 1 ms ochakov-xe-0-0-0-601.yndx.net [213.180.213.134]

7 * * * Превышен интервал ожидания для запроса. 8 10 ms 9 ms 9 ms ugr-b-c1-ae5-0.yndx.net [87.250.239.97] 9 9 ms 9 ms 9 ms ugr-b-c1-ae4-0.yndx.net [87.250.239.75] 10 9 ms 9 ms 9 ms www.yandex.ru [93.158.134.3]

Какая-либо фильтрация локальных адресов не нужна.

Строчки с звездочками - заполняй нулями (собственно как сейчас и работает) * * *

Срок сдачи - среда 18.12.2013 22:00. По ознакомлению отписаться в формате: Ознакомлен, согласен/несогласен.

dm-kiselev commented 10 years ago

Пока выкачиваются зависимости, напишу, что вот эти строки:

while ((line = buf.readLine()) != null) {
line = new String(buf.readLine().getBytes(), Charset.forName("CP866"));

приводят к чтению строки дважды, в результате в парсер передаётся только каждая вторая строка.

SKART1 commented 10 years ago

Глазастый) Ты старую версию скачал - уже исправлено)) Выкачивай testBranch

dm-kiselev commented 10 years ago

Так я потому и закомментил тогда строку с кодировкой!

SKART1 commented 10 years ago

Смог выкачать последнюю версию?

dm-kiselev commented 10 years ago

Да, я скачал, вот разбираюсь. Зачем вообще отдельная функция tracerouteDestination? Это же должно быть в начале функции getTracerouteAnswerString.

SKART1 commented 10 years ago

Нет. Одна функция запускает трейсинг, другая читает построчно результат из буфера. Они выполняются считай параллельно

dm-kiselev commented 10 years ago

Ладно. Не возражаешь, если я сделаю parse и getTracerouteCommand приватными?

SKART1 commented 10 years ago

Делай что считаешь нужным, я же немогу каждую строку одобрять

dm-kiselev commented 10 years ago

Проблема ещё до парсера, потому что в него попадает только первая строчка (которая пустая, если выполнять в винде), а дальше ничего не происходит.

SKART1 commented 10 years ago

Что значит ничего не происходит? Попробуй сделай tracert 127.0.0.1 - у меня он выдал !!7!! одинаковых строк в результате

dm-kiselev commented 10 years ago

Напиши код, как именно ты его использовал.

SKART1 commented 10 years ago

1). Зашёл на localhost:8182 2). Ввёл 127.0.0.1 3). Нажал кнопку "start'

В программе поставил бряк на tracerouteDestination

dm-kiselev commented 10 years ago

А то, что на ветке TestWork главный проект не собирается это нормально?

SKART1 commented 10 years ago

У меня всё собирается. Лог в студию. Телепатов нет.

dm-kiselev commented 10 years ago

Ладно, не важно. Он не может собрать документацию, но если до этого доходит, значит исходники собираются. Я сделал то же самое, как ты написал, но после ввода IP ничего не происходит ни на страничке в браузере, ни в логе нетбинса.

SKART1 commented 10 years ago

Brekpoint поставь в MyWebSocketHandler в @OnWebSocketMessage
public void onText(String msg) {

dm-kiselev commented 10 years ago

А в каком файле у тебя брейкпоинт на tracerouteDestination ?

SKART1 commented 10 years ago

Дима а поиском никак не воспользоваться? Я не могу по КАЖДОМУ вопросу консультировать.

dm-kiselev commented 10 years ago

У меня это не работает. И не понятно, с чего ты взял, что проблемы с парсингом. parse в любом случае возвращает только один TracerouteItem, а не 7, в этом я уверен.

SKART1 commented 10 years ago

Что ты подразумеваешь под "не работает"? Я запускал парсер. Парсит он не корректно. Задача исправить. Значит сиди и разбирайся. Читай логи нетбинса. Знакомся с исходниками. Эксперементируй пока не разберешься

dm-kiselev commented 10 years ago

То, что я написал вчера: запускаю сервер, открываю localhost:8182 в браузере, ввожу IP, нажимаю поиск, появляется всплывающее окно, я подтверждаю, и дальше ничего не происходит. Так вот теперь объясни, как ты запускаешь именно парсер, и что там некорректно. Пока я этого не знаю, я не могу ничего исправить. Когда я тестировал парсер в отдельности от проекта, всё было корректно.

SKART1 commented 10 years ago

Ты должен поставить breakpoint в обработчиках сокетов. Запускать проект в режиме дебага.

dm-kiselev commented 10 years ago

breakpoint я поставил. В режиме дебага то же самое.

SKART1 commented 10 years ago

Значит что то не так делаешь.

dm-kiselev commented 10 years ago

Делаю так, как ты сказал.

SKART1 commented 10 years ago

Нет не делаешь,потому что у меня все работает.

Мне эти пререкания надоели. Не можешь запустить программу на отладку после 3 месяцев её напмсания -это очень печально.

И вообще у меня нет ни желания не возможности часами консультировать по малейшим чихам программы. Разберись сам наконец-таки.

dm-kiselev commented 10 years ago

Хватит мне хамить.

lorygoth commented 10 years ago

@dm-kiselev, на сайт пока не смотри - корректное отображение будет позже, когда доделаем отправку на клиент. Сейчас при пуске на клиенте формируется запрос и отправляется на сервер. В это время сервер выполняет трассировку и в результате (тестировали на 127.0.0.1, он же локалхост) получали 7 раз одно и то же. Если я сейчас беру и выполняю руками команду tracert 127.0.0.1, в результате я вижу только одну строку с IP. Почему на выход появляется 7 одинаковых IP - это "вопрос дня". Если выдаётся 7 раз только на локалхосте, я боюсь предположить что может быть на других IP. Поэтому ошибка достаточно критичная.

mendrew commented 10 years ago

Попробовал, Всё работает. Пробовал с IP Яндекса (213.180.193.1). По началу и правда постоянно получаем из парсера IP 127.0.0.1, причём n-ое кол-во раз, но через некоторое время всё встаёт на круги своя и нужные IP согласно tracert выдаются.

mendrew commented 10 years ago

Заметил, что во время обработки строк tracert бывают строки строго пустые. И для них parse возвращает IP Null, но дальше по этому значению идёт запрос к координатам. Запрос идёт потому, что методу TracerouteItemObject.haveAnyIP() на 118 строке MyWebSocketHandler.java не удается определить что IP NULL. и мы потому уходим по ветке else. Что-то не так с методом getHostAddress() он, наверняка не на то смотрит и не то возвращает.

if (address.getHostAddress() == null)
            {
                return false;
            }
            else
            {
               return true;
            }
SKART1 commented 10 years ago

@GimAndMed попробуй взглянуть на этот метод - может удастся исправить

mendrew commented 10 years ago

Суть в том, что когда в переменную типа InetAddress (объявлена в классе TracerouteItem)

public class TracerouteItem {

    /*
     * The IP address для этого хопа.
     */
    private InetAddress address;

записывается null или вообще ничего не присвоено как здесь (101 строчка MyWebSocketHandler):

TracerouteItem TracerouteItemObject;

в ней хранится IP localhost он же 127.0.0.1.

Следовательно, при разборе tracert, когда у нас пустая строчка, или IP в строке не найдено в методе parse мы возвращаем объект

  String hostname = null, IP = null;

...что-то парсится...

 return new TracerouteItem(hostname, IP);

где IP null, то есть там с этого момента сидит 127.0.0.1.

это просто обработать изменив метод haveAnyIP() в классе TracerouteItem.

public boolean haveAnyIP(){
         if (address.getHostAddress().contentEquals("127.0.0.1")) //проверка равенства строк
         {
             return false;
         }
         else
         {
            return true;
         }
     }

Это грубый вариант

Чего добился: (строка 116 в файле MyWebSocketHandler)

          else if( TracerouteItemObject.haveAnyIP()){ 

срабатывает корректнее, когда IP не найден в строке или найден в качестве IP localhost.

mendrew commented 10 years ago

Теперь почему 7 раз 127.0.0.1.

Если посмотреть лог tracert на моей машине,

1
2 Трассировка маршрута к 123-ПК [127.0.0.1]
3  с максимальным числом прыжков 30:
4
5  1    <1 мс    <1 мс    <1 мс  123-ПК [127.0.0.1]
6
7 Трассировка завершена.

То это всего около 7 строчек, если считать с первой пустой. А так как я выше сказал, что пустые строчки и строчки где IP парсером не найден рассматриваются как null, то значит 127.0.0.1 повторяется около 7 раз.

А вообще парсер прекрасен:

работа парсера

IP from index.html:
93.158.134.3
***192.168.0.1
***10.24.24.1
***192.168.249.185
***192.168.249.133
***192.168.254.153
***188.134.127.81
***188.134.126.201
***188.134.126.237
***188.134.124.2
***193.232.244.93
***87.250.239.75
***87.250.239.97
***93.158.134.3

И tracert:

C:\Users\AndrewMendrew>tracert 93.158.134.3

Трассировка маршрута к www.yandex.ru [93.158.134.3]
с максимальным числом прыжков 30:

  1    57 ms    <1 мс     1 ms  Dlink-Router.Dlink [192.168.0.1]
  2     6 ms     7 ms     3 ms  10.24.24.1
  3     6 ms     3 ms     8 ms  192.168.249.185
  4     1 ms     3 ms     3 ms  192.168.249.133
  5     5 ms     3 ms     3 ms  gw64.zet [192.168.254.153]
  6     5 ms     3 ms     4 ms  cdac0-6.interzet.ru [188.134.127.81]
  7     4 ms     5 ms     7 ms  188.134.126.201
  8     5 ms     3 ms     3 ms  188.134.126.237
  9    14 ms    15 ms    11 ms  188.134.124.2
 10    13 ms    15 ms    15 ms  msk-ix-m9.yandex.net [193.232.244.93]
 11     *        *        *     Превышен интервал ожидания для запроса.
 12    49 ms    19 ms    15 ms  ugr-p1-be1.yndx.net [87.250.239.79]
 13    18 ms    17 ms    17 ms  ugr-b-c1-ae5-0.yndx.net [87.250.239.97]
 14    15 ms    15 ms    15 ms  www.yandex.ru [93.158.134.3]

Трассировка завершена.
dm-kiselev commented 10 years ago

@GimAndMed МОЛОДЕЦ!!! :+1:

SKART1 commented 10 years ago

@GimAndMed круто! Так закрывай тогда проблему