Russian Qt Forum
Ноябрь 22, 2024, 19:18 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Трассировка ip  (Прочитано 6634 раз)
nikeo
Гость
« : Апрель 03, 2012, 15:08 »

Добрый день!

Необходимо написать простенькую программу трассировки по указанному адресу с использованием win32 api
если кто знает необходимые для этого функции и процедуры,то прошу посоветовать.
Записан
V1KT0P
Гость
« Ответ #1 : Апрель 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-й винды, там может оказаться виндовый трассировщик, тогда прямым копированием сделаешь =).
Записан
nikeo
Гость
« Ответ #2 : Апрель 03, 2012, 15:23 »

Это то мне понятно)но я в этом NULL,и это моя первая программа в этой области,по тому мне нужны конкретные вещи)
Записан
V1KT0P
Гость
« Ответ #3 : Апрель 03, 2012, 15:34 »

Это то мне понятно)но я в этом NULL,и это моя первая программа в этой области,по тому мне нужны конкретные вещи)
Тогда может начнешь с чего попроще? Типа там чат, пятнашки, тетрис...
Записан
Bepec
Гость
« Ответ #4 : Апрель 03, 2012, 15:47 »

Ты что, пятнашки организовывать на winApi... Это же жутко Веселый
Записан
Kurles
Бывалый
*****
Offline Offline

Сообщений: 480



Просмотр профиля
« Ответ #5 : Апрель 03, 2012, 17:38 »

Можно скачать исходники mturoute, там есть реализация нужного тебе функционала.
Записан

Код
C++ (Qt)
while(!asleep()) sheep++;
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.147 секунд. Запросов: 22.