Невозможно получить пользовательский кадр Ethernet - PullRequest
0 голосов
/ 01 сентября 2018

Я создал socket_raw, пользовательский тип протокола - 0x2328, и я отправляю данные типа 0x2328 на другую машину. Пакет захвата может быть захвачен, но recvfrom не может его получить. Что я должен делать? Вот полученный код.

struct sockaddr_ll sll;
struct ifreq ifr;

if ((sd = socket (PF_PACKET, SOCK_RAW, htons (0x2328))) < 0) {
    perror ("socket() failed to get socket descriptor for using ioctl() ");
    exit (EXIT_FAILURE);
}

// Use ioctl() to look up interface name and get its MAC address.
memset (&ifr, 0, sizeof (ifr));
sprintf (ifr.ifr_name, "eth1");

if (ioctl (sd, SIOCGIFINDEX, &ifr) < 0) {
    perror ("ioctl() failed");
    return (EXIT_FAILURE);
}

memset (&sll, 0, sizeof (sll));
int sll_len;
sll.sll_family  = AF_PACKET;
sll.sll_ifindex = ifr.ifr_ifindex;
sll_len         = sizeof(sll);

char buffer[1024];
recvfrom(sd, buffer, sizeof(buffer), 0, (struct sockaddr *)&sll, &sll_len);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...