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

问题描述 投票:1回答:2

嗨,我正在尝试使用原始套接字进行数据包注入,我在使用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;
}
sockets network-programming ubuntu-12.04 ioctl packet-injection
2个回答

0
投票

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

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

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

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

应改为使用。

© www.soinside.com 2019 - 2024. All rights reserved.