Форум: "Сети";
Текущий архив: 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