static int init_socket() { int raw_sockfd_l2 = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_IP)); struct sockaddr_ll sock_ip_pack; if (raw_sockfd_l2 0) { printf(%s:%d:%s create the l2 raw socket is fail,__FILE__,__LINE__,__func__); return ret;
static int init_socket()
{
int raw_sockfd_l2 = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_IP));
struct sockaddr_ll sock_ip_pack;
if (raw_sockfd_l2 < 0)
{
printf("%s:%d:%s create the l2 raw socket is fail",__FILE__,__LINE__,__func__);
return ret;
}
sock_ip_pack.sll_family = AF_PACKET;
sock_ip_pack.sll_ifindex = get_interface_index(raw_sockfd_l2, "eth0");
sock_ip_pack.sll_protocol = htons(ETH_P_IP);
if (bind(raw_sockfd_l2, (struct sockaddr *)(&sock_ip_pack), sizeof(sock_ip_pack)) < 0)
{
CWDebugLog("%s:%d:%s bind is fail",__FILE__,__LINE__,__func__);
return ret;
}
}
static int get_interface_index(int fd, const char *dev_name)
{
struct ifreq ifr;
if (dev_name == NULL)
{
return -1;
}
memset(&ifr, 0, sizeof(ifr));
strcpy(ifr.ifr_name, dev_name);
if (ioctl(fd, SIOCGIFINDEX, &ifr) < 0)
{
printf("get index of ethernet device is fail \n");
return -1;
}
return ifr.ifr_ifindex;
}