Опробовал, понравилось.
Информативно и полезно.
Добавить бы еще автомализации: пинг по таймеру, GET по таймеру с сохранением и/или сравнением изменилось или нет и т.п…
Вам скорее всего поможет информация по: Pynnycode и IDN.
Фактически, задача сведется к конвертации любых доменов в IDN перед запросом (как сейчас и делают браузеры).
Они включены в jar-ник, лежат вместе с class-ами. Там не очень хорошо в плане комментов, изначально прога планировалось как быстрый хак, поэтому так получилось… GUI в netbeans сделан, смотреть глазами на него не рекомендуется) Как руки дойдут, может залью на bitbucket.
Да, фичи не уникальны, но 1) в винде с консолью сложновато, 2) в curl надо еще решать проблему с кодировкой результата, 3) в списке нет listen, proxy (ставить squid?).
1) чего это — сложновато? консоль как консоль, и все перечисленное под винду есть
2) ну давайте iconv еще в список добавим — перекодировки для
3) netcat не просто так трижды упомянут, хотя как прокси наверное не лучший вариант — никогда нужно не было
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)
Этот метод — не настоящий пинг, он пытается использовать протокол echo на 7-ом TCP порту. И время прохождения пакета он не возвращает, даже если echo вдруг есть на хосте.
Да я вообще дистра не знаю, у которого нужен рут чтобы сделать 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 идут пакеты на установление соединения, потом сами пакеты с данными, а потом пакеты с подтверждением о получении и уведомление о закрытии соединения.
И отваливается по таймауту. А если пускать как 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.
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
Я склоняюсь к тому, чтобы вообще выпилить пинг. А ставить такую реализацию, с непонятными значениями под виндой, смысла имхо нет. Или же надо разбираться почему так получается.
Сетевая утилита JInternetManiac для веб-разработчиков