Russian Qt Forum

Компиляторы и платформы => Windows => Тема начата: nikeo от Апрель 03, 2012, 15:08



Название: Трассировка ip
Отправлено: nikeo от Апрель 03, 2012, 15:08
Добрый день!

Необходимо написать простенькую программу трассировки по указанному адресу с использованием win32 api
если кто знает необходимые для этого функции и процедуры,то прошу посоветовать.


Название: Re: Трассировка ip
Отправлено: V1KT0P от Апрель 03, 2012, 15:14
Добрый день!

Необходимо написать простенькую программу трассировки по указанному адресу с использованием win32 api
если кто знает необходимые для этого функции и процедуры,то прошу посоветовать.
На википедии написано:
Цитировать
Принцип работы traceroute

Для определения промежуточных маршрутизаторов traceroute отправляет целевому узлу серию ICMP-пакетов (по умолчанию 3 пакета), с каждым шагом увеличивая значение поля TTL («время жизни») на 1. Это поле обычно указывает максимальное количество маршрутизаторов, которое может быть пройдено пакетом. Первая серия пакетов отправляется с TTL, равным 1, и поэтому первый же маршрутизатор возвращает обратно ICMP-сообщение "time exceeded in transit", указывающее на невозможность доставки данных. Traceroute фиксирует адрес маршрутизатора, а также время между отправкой пакета и получением ответа (эти сведения выводятся на монитор компьютера). Затем traceroute повторяет отправку серии пакетов, но уже с TTL, равным 2, что заставляет первый маршрутизатор уменьшить TTL пакетов на единицу и направить их ко второму маршрутизатору. Второй маршрутизатор, получив пакеты с TTL=1, так же возвращает "time exceeded in transit".

Процесс повторяется до тех пор, пока пакет не достигнет целевого узла. При получении ответа от этого узла процесс трассировки считается завершённым.

На оконечном хосте IP-дейтаграмма с TTL = 1 не отбрасывается и не вызывает ICMP-сообщения типа срок истёк, а должна быть отдана приложению. Достижение пункта назначения определяется следующим образом: отсылаемые traceroute дейтаграммы содержат UDP-пакет с заведомо неиспользуемым номером порта на адресуемом хосте. Номер порта будет равен 33434 + (максимальное количество транзитных участков до узла) - 1. В пункте назначения UDP-модуль, получая подобные дейтаграммы, возвращает ICMP-сообщения об ошибке «порт недоступен». Таким образом, чтобы узнать о завершении работы, программе traceroute достаточно обнаружить, что поступило ICMP-сообщение об ошибке этого типа.
То-есть используй обычные сокеты. Также можешь порыться в исходниках утекшей 2000-й винды, там может оказаться виндовый трассировщик, тогда прямым копированием сделаешь =).


Название: Re: Трассировка ip
Отправлено: nikeo от Апрель 03, 2012, 15:23
Это то мне понятно)но я в этом NULL,и это моя первая программа в этой области,по тому мне нужны конкретные вещи)


Название: Re: Трассировка ip
Отправлено: V1KT0P от Апрель 03, 2012, 15:34
Это то мне понятно)но я в этом NULL,и это моя первая программа в этой области,по тому мне нужны конкретные вещи)
Тогда может начнешь с чего попроще? Типа там чат, пятнашки, тетрис...


Название: Re: Трассировка ip
Отправлено: Bepec от Апрель 03, 2012, 15:47
Ты что, пятнашки организовывать на winApi... Это же жутко :D


Название: Re: Трассировка ip
Отправлено: Kurles от Апрель 03, 2012, 17:38
Можно скачать исходники mturoute (http://www.elifulkerson.com/projects/mturoute.php), там есть реализация нужного тебе функционала.