Я создаю программное обеспечение сервера/клиента, используя PF_PACKET и SOCK_RAW, а также собственный протокол при вызове socket().
Когда в клиентском программном обеспечении я создаю сокет таким же образом и просто делаю rcvfrom этого сокета, и я получаю данные
Мой вопрос заключается в том, должен ли я заполнять структуру sockaddr_ll так же, как и для сервера, поскольку, когда я отвечаю от клиента, исходный MAC-адрес, который я получил, является странным, например, 11:11:00:00:00:00 и конечно это не MAC моего клиента
Кто-нибудь знает, что это происходит? Откройте сокет
if ( (sckfd=socket(PF_PACKET, SOCK_RAW, htons(proto)))<0)
{
myError("socket");
}
вот как я получаю данные
n = recvfrom(sckfd, buffer, 2048, 0, NULL, NULL);
printf("%d bytes read\n",n);
Так вот как я в основном получаю данные в клиенте без заполнения структуры sockaddr_ll
Для серверной программы мне нужно заполнить структуру
struct sockaddr_ll saddrll;
memset((void*)&saddrll, 0, sizeof(saddrll));
saddrll.sll_family = PF_PACKET;
saddrll.sll_ifindex = ifindex;
saddrll.sll_halen = ETH_ALEN;
memcpy((void*)(saddrll.sll_addr), (void*)dest, ETH_ALEN);
Мой вопрос: я получаю, как показано, и отправляю, как показано, и когда я отвечаю на сервер, вызываю ту же функцию, которая используется на сервере для отправки, то что я получаю 11:11:00:00:00:00 при получении ответов клиента