Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2007.11.11;
Скачать: [xml.tar.bz2];

Вниз

Пинг UDP-порта   Найти похожие ветки 

 
alexm_hs ©   (2007-02-21 18:28) [0]

Задача, сканер UDP-портов. Есть функция на Indy:

function TfIPScan.ScanUDPPort(_ip_: string; nport: word; timeout: integer): boolean;
var PWS: TIdUDPClient;
 s: string;
begin
 if _ip_ <> "" then begin
   PWS := TIdUDPClient.Create(self);
   try
     PWS.host := _ip_;
     PWS.Port := nport;
     PWS.Send(" ");
     s := PWS.ReceiveString(timeout);
     result := true;
     PWS.free;
   except
     result := false;
     PWS.free;
   end;
 end else result := false;
end;

Но вот беда. В части случаев ищет правильно, а в части (на некоторых хостах) - выдает все порты подряд (т.е. 1,2,3,4...). Что может быть не так?


 
Сергей М. ©   (2007-02-22 08:20) [1]


> Пинг UDP-порта


Нет здесь никакого "пинга".

Пинг - это просто широкоизвестное имя программы (PING.ЕХЕ = Packet INternet Gopher), использующей для проверки доступности хостов (а не портов !) протокол ICMP, коим в твоем коде и не пахнет.


> выдает все порты подряд


Кто выдает-то ?


 
SlymRO   (2007-02-22 08:33) [2]

UDP детектируются не гарантированно и по косвенным признакам типа ICMP_PortUnreachable, но их не каждый узел тебе вернет...
Или детектируются порты с сервисом который по протоколу обязан ответить


 
alexm_hs ©   (2007-02-23 16:57) [3]

Под словом "ПИНГ" я подразумевал именно обнаружение неработоспособности удаленного хоста, на котором, доподлинно известно, должен быть открыт искомый порт. Пример работает в части случаев. Вот только Некоторые хосты присылают ответ, что типа сканируемый порт открыт. Хотя на самом деле он закрыт.


 
Сергей М. ©   (2007-02-26 12:01) [4]


> Хотя на самом деле он закрыт


Ну и причем тут "неработоспособность хоста" ?

Мало ли какие порты он не открыл ! Это же вовсе не говорит о том, что хост "неработоспособен" ..

А еще и файрволы к тому же существуют.


 
alexm_hs ©   (2007-02-28 20:37) [5]

дело в том, что я точно знаю, что такой-то порт открыт. Например UDP:161 - на нем SNMP-агент висит. Так вот, задавая диапазон сканирования UDP портов данного хоста с 1 по 200 й к примеру, я получаю, что открыт 1,2,3,4,5...199,200. И это происходит на части хостов. Другая я же часть верно откликается только на 161. Я пробовал разные сканеры - на всех хостах отрабатывает нормально - показывают только те, кот действительно открыты (161 например). Дело в моем коде. Вот я и спрашиваю, как правильно определить, что порт UDP не открыт.


 
alexm_hs ©   (2007-02-28 20:43) [6]


> А еще и файрволы к тому же существуют.


если бы файрвол даже был бы включен - так сканирование ни к чему не результативному не привело - т.е. ни один порт бы не нашелся. У меня обратная проблема - находятся лишние "открытые" порты. Причем, видно, что это "лажа" т.к. из диапазона от 1 до 1000 не могут быть открыты все сразу.


 
Сергей М. ©   (2007-03-01 08:24) [7]


> задавая диапазон сканирования UDP портов данного хоста с
> 1 по 200 й к примеру, я получаю, что открыт 1,2,3,4,5...
> 199,200


Я не понимаю, с какого перепугу служба, например, на 199-м порту обязана "понимать" посылаемую тобой пустую строку, да еще и отвечать (!) на твой посыл именно строкой (!), а не чем-то иным..

Поясни свою логику ...


 
Rouse_ ©   (2007-03-01 11:29) [8]


> с какого перепугу служба, например, на 199-м порту обязана
> "понимать" посылаемую тобой пустую строку, да еще и отвечать
> (!) на твой посыл именно строкой (!), а не чем-то иным..
>

Сергей, тут все хуже :)
    s := PWS.ReceiveString(timeout);
    result := true;

У него функция возвращает валидный результат после таймаута или если не поднялось исключение (а откуда ему там взяться)? :)


 
Сергей М. ©   (2007-03-01 11:45) [9]


> Rouse_ ©   (01.03.07 11:29) [8]


> тут все хуже


Ну это само собой ляп)


 
alexm_hs ©   (2007-03-01 22:13) [10]

Попробуйте сами этот пример. Он работает :) Но для эксперимента его можно попробовать так же на выключенном или не существующем хосте - рез-т будет что я и говорил - все порты подряд.


> или если не поднялось исключение (а откуда ему там взяться)?
>  :)


Таки берется ведь! Я не настаиваю, но предлагаю попробовать. Делов-то на 5 мин. На включенных хостах пример работает. А вот на выкл - исключения не возникает и возвращается пустая строка. Соотв. вопрос, тем кто знает: ПОЧЕМУ выключенный или несуществующий хост возвращает строку и отправка этой строки данному хосту не вызывает исключение?


 
alexm_hs ©   (2007-03-01 22:23) [11]


> с какого перепугу служба, например, на 199-м порту обязана
> "понимать" посылаемую тобой пустую строку, да еще и отвечать
> (!) на твой посыл именно строкой (!), а не чем-то иным..
>


Почему  же службы

137 (netbios-ns) UDP
138 (netbios-dgm) UDP
161 (snmp) UDP
445 (microsoft-ds) UDP
500 (isakmp) UDP

к примеру все-таки отвечают на пустую строку? Порты, открытые этими службами найдены именно этим примером


 
SlymRO ©   (2007-03-02 04:59) [12]

На недоступный порт сервер должен послать ICMP type:Destination Unreachable code:Port Unreachable
Если пришел пришел такой пакет ВинСок может сгенерить эксепшн сокету. Если такого пакета или эксепшина нет то отправка UDP может считаться состоявшейся т.е. порт вероятно открыт.


 
Сергей М. ©   (2007-03-02 10:10) [13]


> Почему  же службы


> к примеру все-таки отвечают на пустую строку?


Да нифига они не отчечают.
Какой м.б. ответ на галиматью в запросе ?
По таймауту ReceiveString возвращает управление, и это вовсе нельзя назвать ответом.


 
alexm_hs ©   (2007-03-02 17:32) [14]


> По таймауту ReceiveString возвращает управление, и это вовсе
> нельзя назвать ответом.


интересно получается, что каждый раз при отправке пустой строки (не пустой, кстати, а пробела) одним и тем же портам (137,138 161,445, 500) возвращается управление после ReceiveString  и result принимает значение true, а все посыл остальным портам той же строки вызывает исключение. Закономерность чтоль по Вашему?


 
alexm_hs ©   (2007-03-02 17:36) [15]


> На недоступный порт сервер должен послать ICMP type:Destination
> Unreachable code:Port Unreachable
> Если пришел пришел такой пакет ВинСок может сгенерить эксепшн
> сокету. Если такого пакета или эксепшина нет то отправка
> UDP может считаться состоявшейся т.е. порт вероятно открыт.
>


уже что-то. Есть направление. А конкретную реализацию не подскажете? Т.е. я так понял, лучше всего самому пакет собирать и сокет открывать?


 
Сергей М. ©   (2007-03-05 13:47) [16]


> не пустой, кстати, а пробела


Да по барабану, хоть пустая хоть пробел !
Есть такое понятие - "протокол прикладного информационного обмена", и если для конкретного сервиса он не подразумевает запросов вида "пустая строка" или "пробел", то строки с таким содержимым и есть галиматья, на которую конкретный сервис отвечать НЕ обязан.


> Закономерность чтоль по Вашему?


Конечно закономерность !

Не активен (или не доступен) конкретный порт на заведомо доступном хосте ? Заполучи исключение !



Страницы: 1 вся ветка

Форум: "Сети";
Текущий архив: 2007.11.11;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.076 c
15-1191917559
БарЛог
2007-10-09 12:12
2007.11.11
Direct Connect - сервер


15-1191265598
TopoR
2007-10-01 23:06
2007.11.11
2 задачи в Delphi...


15-1191796932
Альберт Мобайл
2007-10-08 02:42
2007.11.11
посоветуйте


2-1192871298
sydenis
2007-10-20 13:08
2007.11.11
как удалить текст из файла?


1-1187258884
Klopan
2007-08-16 14:08
2007.11.11
Object TreeView





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский