我无法理解VLAN标记。 我已使用this link对/ etc / network / interface文件进行了更改 我正在使用C语言在Raspbian(Raspberry pi)上使用套接字编程。
我尝试了两种方法:
C中的套接字是
s = socket(AF_INET,SOCK_RAW,IPPROTO_RAW);
当我使用上面的套接字发送来自覆盆子pi的以太网数据包时,我只能看到传出的" arp"公交车上的消息。
s = socket(AF_PACKET, SOCK_RAW, htons(ETH_P_ALL))
但这会产生错误" sendto failed:无效的参数"在发送数据包时,发送数据包的代码是:
struct sockaddr_in sin;
sin.sin_family = AF_PACKET;
sin.sin_port = htons(30490);
sin.sin_addr.s_addr = inet_addr(destination ip address);
if(sendto(socket, data, iph->tot_len, 0, (struct sockaddr *)&sin, sizeof(sin)) < 0)
{ perror("Sendto failed"); }
else { printf("Packet send"); }
有人可以帮我提供有关如何为每个正在发送的数据包附加VLAN标记的信息吗?或者我在上面的代码中做错了什么?
是否已经实现了使用VLAN发送数据包的代码?
(在我的设置中,我没有使用任何路由器或交换机)
答案 0 :(得分:2)
VLAN标记发生在以太网标头级别,而不是IP标头。如果尝试手动设置VLAN标记,则需要AF_PACKET套接字才能访问以太网标头。 AFAIK,您无法使用AF_INET套接字修改以太网标头。
如果您要做的只是通过“正常”套接字发送VLAN标记信息并让内核生成VLAN标记,您应该只使用该链接中显示的说明然后打开一个普通套接字: