嗨,我正在尝试使用原始套接字进行数据包注入,我在使用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;
}
作为对任何正在搜索该功能的人的提醒,我已经看到了该功能的许多变体,其中许多具有以下错误,因此可能警告以下复制粘贴错误:
strncpy ((char*) ifr.ifr_name, device, IFNAMSIZ);
此行有一个OBOE(一个错误的错误)和不必要的强制转换为char *。
strncpy (ifr.ifr_name, device, sizeof ifr.ifr_name - 1);
应改为使用。