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

Вниз

Ping   Найти похожие ветки 

 
Васек   (2004-01-28 13:27) [0]

Здрасти
тут понадобилось пингануть из своей проги комп в сети
Сдела как описано в статье http://delphi.mastak.ru/articles/icmp.html
Все работает, но меня нисколько пинг интересовал скока TTL.
А в
   IcmpSendEcho(hIP,
                destAddress.S_addr,
                @pingBuffer,
                sizeof(pingBuffer),
                Nil,
                pIpe,
                sizeof(icmp_echo_reply) + sizeof(pingBuffer),
                5000);
Вместо параметров стоит NIL ... Как тока конструкцию не переделывал все равно получить TTL не могу. Подскажите как правельно нужно это оформить чтобы снять TTL.


 
Digitman ©   (2004-01-28 13:56) [1]

вместо nil нужно указать адрес структуры  

var
 ipopt : ip_option_information;
...
       ZeroMemory(@ipopt, sizeof(ipopt)); // !!
...

         if IcmpSendEcho( hIP,
                        destAddress.S_addr,
                        @pingBuffer,
                        sizeof(pingBuffer),
                        @ipopt,
                        pIpe,
                        sizeof(icmp_echo_reply) + sizeof(pingBuffer),
                        5000) = 0 then ...


 
Васек   (2004-01-28 14:42) [2]

Digitman
Теперь даже не пингуется ... TTL возвращается = 0


 
Digitman ©   (2004-01-29 09:49) [3]

ты pIpe.Status проверяешь после выполнения IcmpSendEcho() ?

что говорит ?


 
OlehM   (2004-01-29 15:56) [4]

with ipopt do
 begin
   Ttl := 255;
   Tos := 0;
   Flags := 0;
   OptionsSize := 0;
   OptionsData := nil;
 end;

Должно заработать


 
Васек   (2004-01-29 21:16) [5]

Digitman
Выдает
>> Status: 11007

OlehM
Да работает, но тогда TTL задаю я (ttl=255), а следовательно и получаю его же (ttl=255).


 
Digitman ©   (2004-01-30 08:52) [6]

значит, задана некорректная опция при вызове icmpsendecho()

вот тебе достаточно полный перечень кодов возвращаемого статуса, разбирайся, что у тебя не так ..

const
 IP_SUCCESS                  = 0;
 IP_STATUS_BASE              = 11000;
 IP_BUF_TOO_SMALL            = (IP_STATUS_BASE + 1);
 IP_DEST_NET_UNREACHABLE     = (IP_STATUS_BASE + 2);
 IP_DEST_HOST_UNREACHABLE    = (IP_STATUS_BASE + 3);
 IP_DEST_PROT_UNREACHABLE    = (IP_STATUS_BASE + 4);
 IP_DEST_PORT_UNREACHABLE    = (IP_STATUS_BASE + 5);
 IP_NO_RESOURCES             = (IP_STATUS_BASE + 6);
 IP_BAD_OPTION               = (IP_STATUS_BASE + 7);
 IP_HW_ERROR                 = (IP_STATUS_BASE + 8);
 IP_PACKET_TOO_BIG           = (IP_STATUS_BASE + 9);
 IP_REQ_TIMED_OUT            = (IP_STATUS_BASE + 10);
 IP_BAD_REQ                  = (IP_STATUS_BASE + 11);
 IP_BAD_ROUTE                = (IP_STATUS_BASE + 12);
 IP_TTL_EXPIRED_TRANSIT      = (IP_STATUS_BASE + 13);
 IP_TTL_EXPIRED_REASSEM      = (IP_STATUS_BASE + 14);
 IP_PARAM_PROBLEM            = (IP_STATUS_BASE + 15);
 IP_SOURCE_QUENCH            = (IP_STATUS_BASE + 16);
 IP_OPTION_TOO_BIG           = (IP_STATUS_BASE + 17);
 IP_BAD_DESTINATION          = (IP_STATUS_BASE + 18);
 IP_ADDR_DELETED             = (IP_STATUS_BASE + 19);
 IP_SPEC_MTU_CHANGE          = (IP_STATUS_BASE + 20);
 IP_MTU_CHANGE               = (IP_STATUS_BASE + 21);
 IP_GENERAL_FAILURE          = (IP_STATUS_BASE + 50);
 MAX_IP_STATUS               = IP_GENERAL_FAILURE;
 IP_PENDING                  = (IP_STATUS_BASE + 255);


 
Васек   (2004-01-30 11:11) [7]

Digitman
Согласен задавать ttl=0 это ошибка IP_BAD_OPTION
Но мне нужно получить TTL с конкретного IP, а не задавать TTL самому как это предложил OlehM


 
Digitman ©   (2004-01-30 11:22) [8]


> Васек   (30.01.04 11:11) [7]


а ты не путаешь ?
может, тебя не TTL интиресует, а RTTime ?


 
Васек   (2004-01-30 11:26) [9]

Не путаю, нужно получить RTTime (что делается легко) и TTL (здесь и застрял)
Т.е. интересует 192.168.2.1 RTTime=4мс TTL=128


 
Digitman ©   (2004-01-30 12:52) [10]

реализуй tracert
в цикле пока не достигнут целевой адрес и пока IP_SUCCESS инкрементируй ttl

по выходу из цикла, если достигнут целевой адрес и IP_SUCCESS поле ttl будет содержать интересующее тебя значение



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

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

Наверх




Память: 0.47 MB
Время: 0.05 c
14-1078725422
Мазут Береговой
2004-03-08 08:57
2004.04.04
Присоединяюсь к Игорю Шевченко... и подарок...


1-1079610606
Marser
2004-03-18 14:50
2004.04.04
Межплатформенный перенос


1-1078512349
Troy
2004-03-05 21:45
2004.04.04
Счетчик итерации цикла не меняется...


7-1074689325
Ramario
2004-01-21 15:48
2004.04.04
Меню


1-1079696489
INTAARI
2004-03-19 14:41
2004.04.04
Как преобразовать число (например 12) в строку типа "012"





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский