LINUX.ORG.RU

Ответ на: комментарий от zudwa

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

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

PING_INFO_RECV_TTL

PING_INFO_RECV_QOS

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 ★★★
() автор топика