0

Привет, я пытаюсь выполнить инъекцию пакетов с использованием сырых сокетов, у меня есть проблема с получением индекса интерфейса с помощью команды 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; 
} 
+0

код не компилируется как есть. Отсутствует main(), включает и определяет struct sockaddr_ll. – thuovila

+0

ive только что дал этот fuction, у которого есть проблема, исходный код содержит main() и все, что относится к нему. Код компилируется отлично, но когда я даю имя интерфейса в качестве ввода, появляется сообщение об ошибке «Ошибка получения индекса интерфейса!». – user1959279

ответ

Смежные вопросы