LINUX.ORG.RU

По ссылке как раз что-то вменяемое кажется. Хотя я не особо всматривался.

Зачем тебе либа, если там кода на 1 страницу (для пинга) или на максимум несколько (для tracceroute)?

firkax ★★★★★
()
Ответ на: комментарий от firkax

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

wolverin ★★★
() автор топика
Ответ на: комментарий от zudwa

Он хочет чтобы была функция int traceroute(char const *target_host);

firkax ★★★★★
()
Ответ на: комментарий от zudwa

О спасибо, значит либа популярная, надо брать )

wolverin ★★★
() автор топика
Ответ на: комментарий от zudwa

подключил я либу эту, пинг освоил, начал эксперименты с PING_OPT_TTL увеличивая его с шагом, а как получить теперь откуда вернулся ответ???

Из документация что можно вернуть это https://noping.cc/documentation/ping_iterator_get_info/

PING_INFO_RECV_TTL

PING_INFO_RECV_QOS

wolverin ★★★
() автор топика
Ответ на: комментарий от wolverin

виноват, наврал, используется recvmsg

но как получить адрес ответившего все равно вопрос.

wolverin ★★★
() автор топика
Ответ на: комментарий от wolverin

а штобы это сделать, нужно понять какой тип struct cmsghdr *cmsg->cmsg_level содержит ip адрес я так понимаю в этом месте файла liboping.c

        payload_buffer_len = recvmsg (fd, &msghdr, /* flags = */ 0);
        if (payload_buffer_len < 0)
        {
#if WITH_DEBUG
                char errbuf[PING_ERRMSG_LEN];
                dprintf ("recvfrom: %s\n",
                                sstrerror (errno, errbuf, sizeof (errbuf)));
#endif
                return (-1);
        }
        dprintf ("Read %zi bytes from fd = %i\n", payload_buffer_len, fd);

        /* Iterate over all auxiliary data in msghdr */
        recv_ttl = -1;
        recv_qos = 0;
        for (cmsg = CMSG_FIRSTHDR (&msghdr); /* {{{ */
                        cmsg != NULL;
                        cmsg = CMSG_NXTHDR (&msghdr, cmsg))
        {
                if (cmsg->cmsg_level == SOL_SOCKET)
                {
#ifdef SO_TIMESTAMP
                        if (cmsg->cmsg_type == SO_TIMESTAMP)
                                memcpy (&pkt_now, CMSG_DATA (cmsg), sizeof (pkt_now));
#endif /* SO_TIMESTAMP */
                }
                else if (addrfam == AF_INET) /* {{{ */
                {
                        if (cmsg->cmsg_level != IPPROTO_IP)
                                continue;

                        if (cmsg->cmsg_type == IP_TOS)
                        {
                                memcpy (&recv_qos, CMSG_DATA (cmsg),
                                                sizeof (recv_qos));
                                dprintf ("TOSv4 = 0x%02"PRIx8";\n", recv_qos);
                        } else
                        if (cmsg->cmsg_type == IP_TTL)
                        {
                                memcpy (&recv_ttl, CMSG_DATA (cmsg),
                                                sizeof (recv_ttl));
                                dprintf ("TTLv4 = %i;\n", recv_ttl);
                        }
                        else
                        {
                                dprintf ("Not handling option %i.\n",
                                                cmsg->cmsg_type);
                        }
                } /* }}} */

wolverin ★★★
() автор топика
Ответ на: комментарий от wolverin

если там вообще есть какой то struct in_addr / struct sockaddr_in…

wolverin ★★★
() автор топика
Последнее исправление: wolverin (всего исправлений: 2)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.