Нет такого устройства или адреса при использовании sendto() с необработанным сокетом

#c #networking #raw-sockets

#c #сеть #необработанные сокеты

Вопрос:

Я создал сокет socket(PF_PACKET, SOCK_RAW,htons(ETH_P_ALL)); , затем использовал структуру sockaddr_ll , чтобы я мог дать методу sendto адрес и интерфейс. Но когда я пытаюсь отправить пакет, я получаю сообщение «Нет такого устройства или адреса». Есть идеи, что это значит? Я довольно много искал и, похоже, не могу найти ничего полезного! Я использовал отладчик, чтобы проверить, не получаю ли я неправильный номер интерфейса, но я думаю, что это правильно. Я также пытался изменить некоторые параметры sockaddr_ll и самого sock, но ничего не работает.

Комментарии:

1. Я не вижу никакого кода, который не работает. Где минимальный код, который не работает?

2. я получаю ошибку в этой части sendto(sockfd, dst_ptr, dst_msg_size, 0, (struct sockaddr*)amp;socket_address, sizeof(struct sockaddr_ll))

3. Хорошо, так где же код, который не работает? Я все еще этого не вижу. Когда я запускаю указанный вами код, он сообщает мне, что dst_ptr и dst_msg_size и socket_address не определены. Это ошибка, которую вы получаете? Вам нужно определить эти переменные.

4. Ошибка заключалась в номере интерфейса, который я передаю сокету (функции ioctl работают не так хорошо). Я использовал if_nametoindex() , а затем он работал нормально

5. Предупреждение: возможно, вам потребуется запустить вашу программу с помощью sudo