linux rawsocket 强制绑定网卡后网络卡死
电脑有两张网卡,eth0,eth1。使用原始套接字发现都从eth0发出包,在网上查资料使用下面两种方式绑定网卡。方法一并没有成功还是通过eth0发出 (sar命令查看)。方法2直接导致eth1网络卡死 。是否有什么地方写错了呢? 请教大神
sockfd = socket (AF_INET, SOCK_RAW, IPPROTO_TCP);
if (sockfd < 0)
{
perror("socket()");
exit(1);
}
/* 方法一
struct sockaddr_ll sl;
struct ifreq ifr;
memset(&sl, 0x00, sizeof(sl));
memset(&ifr, 0x00, sizeof(ifr));
sl.sll_family = AF_PACKET;
sl.sll_protocol = htons(ETH_P_IP);
strncpy(ifr.ifr_name, "eth0", sizeof(ifr.ifr_name));
ioctl(sockfd, SIOCGIFINDEX, &ifr);
sl.sll_ifindex = ifr.ifr_ifindex;
printf("index = %d \n\r" ,ifr.ifr_ifindex);
bind(sockfd, (struct sockaddr *)&sl, sizeof(sl));
*/
/* 方法2*/
struct ifreq ifr;
memset(&ifr, 0x00, sizeof(ifr));
strncpy(ifr.ifr_name, "eth1", strlen("eth1"));
if (setsockopt(sockfd, SOL_SOCKET, SO_BINDTODEVICE, (char *)&ifr, sizeof(ifr))<0){
printf("SO_BINDTODEVICE failed");
//exit(1);
}