Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Пингующий мидлет


Автор: ovod 14.6.2004, 01:18
Есть ли пример простейшего ping.java с использованием токма javax.microedition.io.* ?

Автор: AntonSaburov 15.6.2004, 12:12
Насколько я помню ICMP в JAVA не поддерживается - а потому возможности сделать полноценный PING не получается. Был когда-то примерчик несколько исскуственного пинга - использовать еще какой-то порт.

Автор: ovod 15.6.2004, 19:51
...Хмм..
я задал этот вопрос, потому что в программке для мобилы! NetTools v.0.2 (брать здесь http://download.siemens-club.ru:8000/files/java/nt.rar) намечен и ping, и whoIs и tracert, но самое главное - там действующий SSH-клиент!
Ковырять исходники можно чудным декомпилятором djdec377 (брать здесь http://www.simtel.net/product.download.php?id=60196&url=ftp%3A%2F%2Fftp.chg.ru%2Fpub%2Fsimtelnet%2Fwin95%2Fjava%2Fdjdec377.zip&mirrorsite=Russia&x=0&SiteID=simtel.net)
В J2SE конешно есть пакет java.net (которого нету в j2ME sad.gif ), на основе которого куча ping.java в гугле. А что представляет собой этот java.net (конкретно его реализация) не пойму. Если этот пакет на java написан, то не мог бы кто-нить его мне прислать пощупать, плиз?
С большой радостью также приму ссылку на реализцию пинга через порт.

Автор: AntonSaburov 16.6.2004, 11:39
Цитата
но самое главное - там действующий SSH-клиент!

Так это работает уже на уровне TCP. А ping существует на том же уровне, но ICMP. И его на JAVA не сделать.

То, что гугль выдает кучу ping.java - так это скорее всего надстройка над JNI. А реальный код на Си написан.

А вот примерчик "якобы" ping
http://www.3dcom.com/ping/Pinger.html

Автор: Sun 16.6.2004, 17:26
Пинг наверно можно без труда написать на чистой Java. По идее надо открыть UDP сокет и отсылать на него ICMP-пакеты, которые можно тоже формировать через Java. Пинг построен по принципу эхо-сервера, ты посылаешь датаграмму а сервер возвращает ее тебе. Описание ICMP можно посмотреть тут:
http://www.school.ioffe.ru/lessons/courses/tcpip/icmp.html

Автор: AntonSaburov 16.6.2004, 19:18
Цитата
По идее надо открыть UDP сокет и отсылать на него ICMP-пакеты

Так UDP-заголовок сформировать у тебя не получится - не тот уровень.
Или есть идеи ?
Я просто как-то раз занимался этим вопросом. И мне пришлось делать свой ping через JNI.

Но если что-то может получится - было бы интересно.

Автор: Nobody 16.6.2004, 23:56
Анриал. На Яве такой низкоуровневый код писать нельзя.

Автор: ovod 17.6.2004, 00:18
Ситуация такая:
1) Если "выплевывать" сформированный "вручную" ICMP-пакет c type 8 через UDP-сокет (хотя тут вопрос: при организации сокета можно ли не указывать порт доставки? ), то нужно как-то все равно ловить ICMP ехо-пакет c type 0. Куда ж все-тки пингуемый отвечает, ведь не на порт? Как мы поймаем?
2) либо же UDP-пакет на неиспользуемый порт, и тогда пингуемый опять же ответит ICMP-пакетом с type 3. Вопрос опять не снимается.
3) либо же на пингуемом хосте должен быть запущен ехо-порт, например 7, который нам ответит UDP-пакетом, но не всяком компе этот ехо-порт запущен.
4) либо же делать косвенный пинг, посылая команду "сделать пинг" некоторому промежут. серверу и получая отчет по TCP.

Правильно ли я рассуждаю? Поправьте. RFCы читал, но по англицки тяжело, 5% понимания.

Автор: AntonSaburov 17.6.2004, 11:20
Мда-а-а. Есть идея - хостинг пингов smile.gif
Т.е. сервер занимается тем, что по TCP принимает запросы на пингование и отсылает результаты пинга.

Вообщем пункт 4 занятен.

Автор: Nobody 17.6.2004, 17:58
AntonSaburov
Хех)) да, конечно, это было бы неплохо, только надо что-то делать, чтобы не заDOSили...
Добавлено @ 18:01
В принципе, идея действительно хорошая, можно бы и сделать smile.gif

Автор: Sun 17.6.2004, 18:56
Да уж, на чистой Java ping не сделать так как она не поддерживает сырые (RAW) сокеты. Я тут дискусси на форуме почитал, насколько я понял решение так и не найдено
http://forum.java.sun.com/thread.jsp?thread=453788&forum=31&message=2519662

Автор: ovod 21.6.2004, 19:00
Можно ли импортировать функции из WS2_32.dll в Java-приложение? Ваще импорт возможен из внешних библиотек? Например?

Автор: Domestic Cat 21.6.2004, 19:10
Возможен - JNI

http://www.codeguru.com/java/tij/tij0191.shtml

Автор: AntonSaburov 21.6.2004, 19:16
Еще в JAVA 1.5 есть InetAddress.isReachable()

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)