使用SIOCGIFINDEX获取接口索引时出错

时间:2013-02-22 18:26:47

标签: sockets network-programming ubuntu-12.04 ioctl packet-injection

您好我正在尝试使用原始套接字进行数据包注入,我在使用ioctl的SIOCGIFINDEX命令获取接口索引时遇到问题。我使用ubuntu 12.04作为我的操作系统。请帮助代码:

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;
}

2 个答案:

答案 0 :(得分:1)

答案 1 :(得分:0)

作为对任何人正在搜索该功能的提醒,我已经看到了该功能的许多变体,其中许多具有以下错误,因此可能警告以下复制粘贴错误:

strncpy ((char*) ifr.ifr_name, device, IFNAMSIZ);

此行具有 OBOE (一次性错误)和不必要的强制转换为char *。

strncpy (ifr.ifr_name, device, sizeof ifr.ifr_name - 1);

应该代替。