Сетевая утилита JInternetManiac для веб-разработчиков

    С давних пор я пользовался небольшой сетевой утилитой Internet Maniac (весит 100 кб). Чаще всего в ней я пользовался функцией «Connect», с помощью которой можно создать TCP-соединение с сервером (обычно с веб-сервером), отправить запрос и увидеть ответ сервера. Такое можно повторить и с помощью консольного telnet, но в Internet Maniac это делать удобнее. Другие функции программы: host lookup (определение IP и/или имена хоста), listen (простейший TCP-сервер), сканер портов, ping, whois, проверка почты и др.

    Программа давно не обновляется, я пытался найти ей замену, но нормальную бесплатную так и не нашёл. В итоге решил сделать собственный более продвинутый аналог на Java.

    Главное окно программы выглядит примерно как и окно Internet Maniac:
    JInternetManiac

    В своей программе я реализовывал такие функции, которые мне нужны при разработке сайтов.

    Итак, в текущей версии реализовано:
    • Connect: клиентское TCP-соединение. Реализована поддержка различных кодировок, чего не было в Internet Maniac и это было неудобно.
    • Listen: TCP-сервер. Для каждого входящего соединения создается новая вкладка, на которой можно увидеть запрос и при желании ответить клиенту. Например, можно посмотреть заголовки веб-браузера и «пообщаться» с ним.
    • HTTP: веб-клиент. Почти как функция Connect, только не нужно вручную вбивать HTTP-запрос: достаточно ввести URL и можно увидеть HTTP-ответ от веб-сервера. Кодировка определяется автоматически. HTTPS не поддерживается.
    • Proxy: HTTP-прокси-сервер. Позволяет просматривать всю историю HTTP-запросов и ответов (включая «тело»). Бывает полезно для решения проблем с веб-сайтами или «исследования» чужих сайтов (посмотреть заголовки, посмотреть вообще какие запросы идут, какие cookie пересылаются и т. д.).
    • Site speed: замер скорости загрузки веб-сайта. В некотором роде, аналог Apache Benchmark. Опций совсем немного (количество запросов и количество потоков), но для проведения базовых замеров хватает.
    • Whois: получение регистрационной информации о домене или IP-адресе. Если вводится домен, то информация показывается сразу и по домену и по IP. Первый whois-запрос выполняется к серверу whois.iana.org, затем по его «рекомендации» делается запрос к следующему whois-серверу.
    • Host lookup: получение IP и имени хоста.
    • Ping: обычный пинг. Используются платформозависимые библиотеки (dll+so), соответственно, работает не везде.

    Есть возможность запуска перечисленных функций прямо из командной строки, например:
    jim.bat proxy 3128 (для запуска прокси на порту 3128).

    Последнюю версию тестировал только под WinXP, но должно работать и под другими ОС (кроме функции ping). Само собой, для запуска нужна JDK/JRE 5+.

    Прямая ссылка на последнюю версию: edhel.krasu.ru/system/files/jim-0.3.zip (200 кб).

    Спасибо за внимание. Замечания, пожелания, предложения приветствуются!
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 28

      +1
      Здравствуйте.
      Internet Maniac не пользовался, начну с вашей программы.
      Спасибо, что делитесь полезностями :)
        +1
        Опробовал, понравилось.
        Информативно и полезно.
        Добавить бы еще автомализации: пинг по таймеру, GET по таймеру с сохранением и/или сравнением изменилось или нет и т.п…
          0
          *автомаТизации
            0
            спс, подумаю над этим
          0
          Спасибо, за отличную программу!) Весьма полезная утилита)
            +1
            Спасибо за программу, но при проверке whois на домен.рф вываливается эксепшн.
              0
              Спс, буду иметь ввиду, с русскими доменами везде иксепшн вываливается. Видимо предварительно надо конвертить домены в ascii.
                0
                Вам скорее всего поможет информация по: Pynnycode и IDN.
                Фактически, задача сведется к конвертации любых доменов в IDN перед запросом (как сейчас и делают браузеры).
                  0
                  есть стандартный метод java.net.IDN.toASCII
              0
              Исходники покажете?
                0
                Они включены в jar-ник, лежат вместе с class-ами. Там не очень хорошо в плане комментов, изначально прога планировалось как быстрый хак, поэтому так получилось… GUI в netbeans сделан, смотреть глазами на него не рекомендуется) Как руки дойдут, может залью на bitbucket.
                +2
                host, ping, jwhois, netcat, netcat, netcat, curl, ab, man
                :)
                  0
                  Да, фичи не уникальны, но 1) в винде с консолью сложновато, 2) в curl надо еще решать проблему с кодировкой результата, 3) в списке нет listen, proxy (ставить squid?).
                    –1
                    1) чего это — сложновато? консоль как консоль, и все перечисленное под винду есть
                    2) ну давайте iconv еще в список добавим — перекодировки для
                    3) netcat не просто так трижды упомянут, хотя как прокси наверное не лучший вариант — никогда нужно не было
                  0
                  Спасибо, но в чем проблема написать свой простейший пинг? Зачем использовать системную библиотеку да еще и на яве?
                    0
                    в стандартном API Java нет поддержки ICMP
                    0
                    Пинг только под root?

                    Sep 16, 2011 12:07:21 AM ru.krasu.edhel.jim.win.Worker onError
                    WARNING: Operation not permitted
                    java.io.IOException: Operation not permitted
                    at org.savarese.rocksaw.net.RawSocket.__throwIOException(RawSocket.java:183)
                    at org.savarese.rocksaw.net.RawSocket.open(RawSocket.java:263)
                    at ru.krasu.edhel.jim.util.Ping$Pinger.(Ping.java:93)

                    А так лучше на github выложить — полезная штука.
                      0
                        0
                        Этот метод — не настоящий пинг, он пытается использовать протокол echo на 7-ом TCP порту. И время прохождения пакета он не возвращает, даже если echo вдруг есть на хосте.
                          0
                          время можно и вручную попробовать посчитать, но у TCP дополнительные накладки на установление соединения могут быть
                        0
                        А стандартный консольный пинг у Вас работает не под рутом?

                        У меня репа на hg, так что выложу на bitbucket.
                          0
                          Да я вообще дистра не знаю, у которого нужен рут чтобы сделать ping.

                          А про реализацию надо почитать чуть-чуть внимательнее

                          A typical implementation will use ICMP ECHO REQUESTs if the privilege can be obtained, otherwise it will try to establish a TCP connection on port 7

                          Время его выполнения будет через System.currentMillis(). Не думаю что от тестовой утилиты требуется точность в наносекундах для определения пинга. Как по мне так нужно его наличие, порядок величин и количество потерь. А будет там 67 или 72 мс — не принципиально.
                            0
                            Этот метод всё же странный, я пытался пользоваться им и бросил это дело. Сейчас сделал тест с таким кодом:

                            InetAddress host = InetAddress.getByName(«ya.ru»);
                            for (int i = 0; i < 10; i++) {
                            long time = System.nanoTime();
                            System.out.println(host.isReachable(10000) + " " + (System.nanoTime() — time) / 1000000 + " ms");
                            }

                            Обычный пинг выдает 74 мс, а этот код печатает значения от 0 до 13.

                            По логике вещей, если вдруг используется TCP ECHO, то там разница должна быть больше, чем просто 67 и 72, т. к. в TCP идут пакеты на установление соединения, потом сами пакеты с данными, а потом пакеты с подтверждением о получении и уведомление о закрытии соединения.
                              +1
                              Забавно. А какая у вас jvm?
                              У меня на OpenJDK 6 получается такая картина — если запускать от пользователя ваш код, то получается из tcpdump

                              18:20:30.505886 IP 192.168.0.188.49302 > www.yandex.ru.echo: Flags [S], seq 2605630052, win 14600, options [mss 1460,sackOK,TS val 3859659 ecr 0,nop,wscale 4], length 0

                              И отваливается по таймауту. А если пускать как sudo то

                              18:20:42.716477 IP 192.168.0.188 > www.yandex.ru: ICMP echo request, id 10651, seq 8883, length 44

                              Так что получается, что все работает как и описано, только надо для java поставить suid, а этого обычно не делают и похоже делать не будут. Но я бы поменял на эту реализацию, потому что не надо нативы таскать с собой. И кстати пинги получаются нормальные

                              true 32 ms
                              true 29 ms
                              true 27 ms
                              true 27 ms
                              true 34 ms
                              true 27 ms
                              true 26 ms
                              true 24 ms
                              true 18 ms

                              А по поводу github. Я тоже везде где могу использую меркуриал, но хаб он богат community и если очень надо, то есть hg-git.
                                0
                                У меня sun-овская 1.6 + winxp.

                                true 12 ms
                                true 10 ms
                                true 10 ms
                                true 10 ms
                                true 10 ms
                                true 10 ms
                                true 0 ms
                                true 11 ms
                                true 10 ms
                                true 10 ms

                                Я склоняюсь к тому, чтобы вообще выпилить пинг. А ставить такую реализацию, с непонятными значениями под виндой, смысла имхо нет. Или же надо разбираться почему так получается.
                        0
                        А как быть, если я сижу за прокси сервером?
                          0
                          Некоторые фичи можно было бы реализовать с поддержкой прокси, но честно говорят, вряд ли я буду это реализовывать.
                            0
                            эх… жаль… ну, если будет желание все таки сделать проксю — буду благодарен.

                        Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                        Самое читаемое