Привет, я пытаюсь выполнить инъекцию пакетов с использованием сырых сокетов, у меня есть проблема с получением индекса интерфейса с помощью команды SIOCGIFINDEX из ioctl. Я использую ubuntu 12.04 в качестве ОС. Пожалуйста, помогите код:Ошибка получения индекса интерфейса с помощью SIOCGIFINDEX
int BindRawSocketToInterface(char *device, int rawsock, int protocol)
{
struct sockaddr_ll sll;
struct ifreq ifr;
bzero(&sll, sizeof(sll));
bzero(&ifr, sizeof(ifr));
/* First Get the Interface Index */
strncpy ((char*) ifr.ifr_name, device, IFNAMSIZ);
if ((ioctl(rawsock, SIOCGIFINDEX, &ifr))== -1)
{
printf ("Error getting interface index!\n");
exit(-1);
}
/* Bind our rawsocket to this interface */
sll.sll_family = AF_PACKET;
sll.sll_ifindex = ifr.ifr_ifindex;
sll.sll_protocol = htons(protocol);
if ((bind(rawsock, (struct sockaddr*)&sll,sizeof(sll)))== -1)
{
perror("Error binding raw socket to interface \n");
exit(-1);
}
return 1;
}
код не компилируется как есть. Отсутствует main(), включает и определяет struct sockaddr_ll. – thuovila
ive только что дал этот fuction, у которого есть проблема, исходный код содержит main() и все, что относится к нему. Код компилируется отлично, но когда я даю имя интерфейса в качестве ввода, появляется сообщение об ошибке «Ошибка получения индекса интерфейса!». – user1959279