Я хочу использовать сокет для передачи моего пакета без изменений, поэтому я попытался использовать необработанный сокет следующим образом.
static int raw_sock = 0;
static struct sockaddr_ll saddr;
static struct ifreq ifr;
static int ifindex;
raw_sock = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL));
memset(&ifr,0,sizeof(ifr));
memset(&saddr,0,sizeof(saddr));
strcpy(ifr.ifr_name,"eth0");
ioctl(raw_sock,SIOCGIFINDEX,&ifr);
ifindex = ifr.ifr_ifindex;
saddr.sll_family = AF_PACKET;
saddr.sll_ifindex = ifindex;
saddr.sll_protocol = ETH_P_ALL;
sendto(raw_sock,pkt.buffer,pkt.pkt_len,0,(struct sockaddr *)&saddr,sizeof(saddr));
Все работает правильно, как я хочу, но после того, как я добавил некоторый интерфейс vlan, используя
vconfig add eth0 4000
Приведенный выше код не работает, как раньше.Он автоматически добавляет тег vlan 0x81 0x00 0x00 0x00 ко всем пакетам, которые он передал.У кого-нибудь есть решение для этого.Я просто хочу отправить все пакеты без изменений.Спасибо.