lehha
30-12-2005, 09:25
Всем привет!
Возникла следующая проблемка, необходимо отбросить "мертвые" IP адреса.
При проходе по подсети я коннектюсь к каждому айпишнику, но если в данный момент компьютер не включен то коннект проходит очень долго и изза этого тормозится весь процесс. Вопрос в том как мне реализовать этот мини пинг? Знаю что пинг использует ICMP протокол, но как мне правильно настроить сокет?? Кто с этим работал??
Вот кусочек моего кода проверки наличия компа в сети.
if (WSAStartup(0x0101, &wsadata)!=SOCKET_ERROR)
{
SOCKET s=socket(AF_INET,SOCK_RAW,IPPROTO_ICMP);
if (s!=INVALID_SOCKET)
{
sockaddr_in adrr;
int nTempTTL = 1; //TTL Какое должно быть
значение?? в чем оно измеряется в секундах или в мили секундах??
setsockopt(s, IPPROTO_IP, IP_TTL, (char*) &nTempTTL, sizeof(nTempTTL));
int nTempTOS = 1; //TOS - type-of-service, что это такое счем едет какие значения принимает??
setsockopt(s, IPPROTO_IP, IP_TOS, (char*) &nTempTOS, sizeof(nTempTTL));
unsigned int ip = inet_addr(FullAddress);
phe = gethostbyaddr((char*)&ip,4,AF_INET );
adrr.sin_addr.S_un.S_addr=((struct in_addr *)phe->h_addr_list[0])->s_addr;
char buff[100];
adrr.sin_family = AF_INET;
sendto(s, buff, sizeof(buff), 0, (sockaddr*)&addr, sizeof(addr))
re = WSAGetLastError();
}
}
И так вопросов сразу оч много
TTL Какое должно быть значение?? в чем оно измеряется в секундах или в мили секундах??
TOS - type-of-service, что это такое счем едет какие значения принимает??
На какой порт отсылать информацию, что должен содержать buff.
Спасибо за рание.
Возникла следующая проблемка, необходимо отбросить "мертвые" IP адреса.
При проходе по подсети я коннектюсь к каждому айпишнику, но если в данный момент компьютер не включен то коннект проходит очень долго и изза этого тормозится весь процесс. Вопрос в том как мне реализовать этот мини пинг? Знаю что пинг использует ICMP протокол, но как мне правильно настроить сокет?? Кто с этим работал??
Вот кусочек моего кода проверки наличия компа в сети.
if (WSAStartup(0x0101, &wsadata)!=SOCKET_ERROR)
{
SOCKET s=socket(AF_INET,SOCK_RAW,IPPROTO_ICMP);
if (s!=INVALID_SOCKET)
{
sockaddr_in adrr;
int nTempTTL = 1; //TTL Какое должно быть
значение?? в чем оно измеряется в секундах или в мили секундах??
setsockopt(s, IPPROTO_IP, IP_TTL, (char*) &nTempTTL, sizeof(nTempTTL));
int nTempTOS = 1; //TOS - type-of-service, что это такое счем едет какие значения принимает??
setsockopt(s, IPPROTO_IP, IP_TOS, (char*) &nTempTOS, sizeof(nTempTTL));
unsigned int ip = inet_addr(FullAddress);
phe = gethostbyaddr((char*)&ip,4,AF_INET );
adrr.sin_addr.S_un.S_addr=((struct in_addr *)phe->h_addr_list[0])->s_addr;
char buff[100];
adrr.sin_family = AF_INET;
sendto(s, buff, sizeof(buff), 0, (sockaddr*)&addr, sizeof(addr))
re = WSAGetLastError();
}
}
И так вопросов сразу оч много
TTL Какое должно быть значение?? в чем оно измеряется в секундах или в мили секундах??
TOS - type-of-service, что это такое счем едет какие значения принимает??
На какой порт отсылать информацию, что должен содержать buff.
Спасибо за рание.