используя linux raw socket с интерфейсом vconfig - PullRequest
0 голосов
/ 30 июня 2011

Я хочу использовать сокет для передачи моего пакета без изменений, поэтому я попытался использовать необработанный сокет следующим образом.

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 ко всем пакетам, которые он передал.У кого-нибудь есть решение для этого.Я просто хочу отправить все пакеты без изменений.Спасибо.

1 Ответ

1 голос
/ 01 июля 2011

Попробуйте отправить с vlan0, а не с eth0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...