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