#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