Pull to refresh

Comments 28

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

У меня репа на hg, так что выложу на bitbucket.
Да я вообще дистра не знаю, у которого нужен рут чтобы сделать 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 мс — не принципиально.
Этот метод всё же странный, я пытался пользоваться им и бросил это дело. Сейчас сделал тест с таким кодом:

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 идут пакеты на установление соединения, потом сами пакеты с данными, а потом пакеты с подтверждением о получении и уведомление о закрытии соединения.
Забавно. А какая у вас 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.
У меня 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

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

Articles