Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

icmp result после udp send


Страницы:   1 2

guard_gg ©   (2008-01-19 18:01:00) 

Предположим что udp (indi или другой без разницы) клиент посылает пакет на удаленный хост на закрытый udp порт.
Смотрим в фаервол и видим что пришел icmp result либо с самого хоста либо с маршрутизатора "получатель не доступен".
Процесс system.exe вроде.
1) А как я могу получить чтобы потом обработать данный пакет в Дельфи?

2) И правильно ли я полагаю что одним из способов провереять наличие хостов в сети можно посылая пакет на udp и в случае если ответил хост то он жив а в случае если маршрутизатор то хост мертв?


guard_gg   (2008-02-06 18:32:00) [21]


> Одно другому не мешает. По сути SendTo/RecvFrom внутри делают
> тот-же Connect, потом отправку, потом отключение. При каждом
> вызове. Вот и получается, что ты отправил SendTo, пакет
> ушел в сеть, на него пришел ответ "нетути такого", а система
> не знает, кому его отдать. Ну и выбрасывает, ясен пень.
> А если сокет подключенный, то система видит - "вот он, отправитель.
>  Шлет, понимашь, куды ни попадя, пусть сам с ошибками и
> разбирается."
>


(пробовал но не уверен)
Ну даж не знаю, обычно все пакеты result svchost.exe кушает и не с кем не хочет делиться даж если сокет пытается recv делать
На счет Send/To не уверен так как сообщение error не узнавал че возращает.
А вот Recv как раз таки на закрытый порт заставляет Application окно с ошибкой выдавать. Естественно предполагал что можно по OnException обрабатывать да только мне показалось что слишком криво это все получаться бут. Я же всетаки надеялся что можно результат будет получать нормальным путем и обрабатывать основываясь на содержимом пакета а не ошибке приложения


ага   (2008-02-06 18:09:00) [22]

2 Evgeny V

> В UDP Connect - это скорее для упрощения работы... имхо.

Одно другому не мешает. По сути SendTo/RecvFrom внутри делают тот-же Connect, потом отправку, потом отключение. При каждом вызове. Вот и получается, что ты отправил SendTo, пакет ушел в сеть, на него пришел ответ "нетути такого", а система не знает, кому его отдать. Ну и выбрасывает, ясен пень. А если сокет подключенный, то система видит - "вот он, отправитель. Шлет, понимашь, куды ни попадя, пусть сам с ошибками и разбирается."


Evgeny V   (2008-02-06 14:33:00) [23]


> Andru ©   (06.02.08 09:44) [10]
> Если порт никто не слушает, то следующий send вернет ошибку,
>  а WSAGetLastError вернет WSAECONNRESET

А не recv / recvfrom??
Все равно полной гарантии нет в получении такого сообщения...


> ага   (06.02.08 12:17) [11]

В UDP Connect - это скорее для упрощения работы... имхо.


ага   (2008-02-06 12:19:00) [24]

Да, после этого разумеется придется использовать Sendвместо SendToetc.


ага   (2008-02-06 12:17:00) [25]

2 guard_gg

Чтобы получить результат, сокет должен быть "соединенным". Вывод - нужно подключить сокет, т.е. Connect(...)

PS На всякий случай - я видел, что UDP.


Andru   (2008-02-06 09:44:00) [26]

Если порт никто не слушает, то следующийsend вернет ошибку, а WSAGetLastError вернет WSAECONNRESET.


guard_gg   (2008-02-06 02:10:00) [27]

По человечески:
Как перед отправкой сообщения на UDP порт узнать открыт он или нет?
(кратко как только смог)


DVM   (2008-01-24 11:10:00) [28]


> На нижнем уровне ПРОГРАММИРОВАНИЕ СОКЕТОВ а НЕ OSI!!!

Ты бред то не неси откровенный. Нижний уровень модели OSI ты хоть знаешь как называется и к чему относится? Нижний уровень - физический.

Тебе же доступен максимум 3 уровень - сетевой, на котором функционирует протокол IP в частности. И все уровни выше.


> Я бы сам смог разобраться да вот тока в модулях INDI .pas
> файлов нету, тока компилированные .dcu. прочие компоненты
> с сокетами такие же. копирайт всетаки =(

Исходники есть в интернет на сайте инди.


> А под WinSock даже как я понял из WinSDKHelp даже сокета
> навороченного не создашь. нужен winsock2 модуль

Ну и используй WinSock2. Заголовочный файл WinSock2.pas везде валяется.


> Ну я же не прошу Вас выкладывать выкладывать военные тайны
> в повышенном обьеме. просто прошу в двух предложениях сказать
> где копать и как =)

Ты по человечески объясни по шагам, что ты хочешь сделать. Ибо из написанного выше мало понятно.


guard_gg   (2008-01-24 02:12:00) [29]

На нижнем уровне ПРОГРАММИРОВАНИЕ СОКЕТОВ а НЕ OSI!!!
то есть НЕ способом "кинул компоненту на форму а та и заработала"

---------------
Логика такая:
-- Если результат не прийдет - то OPEN / FILTERED
{тоесть либо открыт и можно продолжать передачу данных, либо его отфильтровал маршрутизатор выясниться уже при попытке заговорить с конкретном сервисом}

-- Если прийдет от маршрутизатора или хоста ICMP "получатель не доступен" то проинформировать об этом пользователя в виде ошибки соединения

Ну я же не прошу Вас выкладывать выкладывать военные тайны в повышенном обьеме. просто прошу в двух предложениях сказать где копать и как =)

Если кто сможет скинуть examle на любом из языков программирования кроме ассемблера =) то буду весьма благодарен

Великий гугл про сокеты детскую инфу предлогает.

Я бы сам смог разобраться да вот тока в модулях INDI .pas файлов нету, тока компилированные .dcu. прочие компоненты с сокетами такие же. копирайт всетаки =(

А под WinSock даже как я понял из WinSDKHelp даже сокета навороченного не создашь. нужен winsock2 модуль


DVM   (2008-01-22 14:54:00) [30]


> Чтобы просто при отсылании пакета на удаленный udp порт
> уметь получать результат и както обрабатывать програмно

А с какого перепугу тебе обязательно пришлют результат/ответ? Даже если получатель пакет получил ты об этом точно не узнаешь.


ketmar   (2008-01-22 12:30:00) [31]

>[4] guard_gg (22.01.08 02:09)
>нужно мне научиться работать на нижних уровнях программирования сокетов
udp не является «нижним уровнем».


guard_gg   (2008-01-22 02:09:00) [32]

Пинг делать не хочу, он и так есть =)

Подозревал что не праильно ну уж часто на практике так было

Если не пришел то значит или киска его сьела или порт открыт
так что шутка не удалась, теорию udp я немного знаю

///////////////////////////////////////////////////////////////////////////
Если конкретно то нужно мне научиться работать на нижних уровнях программирования сокетов. Чтобы просто при отсылании пакета на удаленный udp порт уметь получать результат и както обрабатывать програмно
Пока что приходиться тестировать проект за счет фаервола и самому ему результат подсказывать =D


Anatoly Podgoretsky   (2008-01-19 23:16:00) [33]

> guard_gg  (19.01.2008 18:01:00)  [0]

А если не пришел, то бросаем монетку?


Сергей М.   (2008-01-19 18:29:00) [34]


> 2)


Неправильно.


DVM   (2008-01-19 18:18:00) [35]

Ты хочешь PING сделать что ли?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо