如何在Linux中创建Ethernet II
帧头?可以使用eth_header()
创建802.3帧头,给出skbuffer
以及源和目标MAC和长度。 Ethernet II
帧格式也可以使用相同的函数,我们使用类型字段而不是长度吗?创建以太网II帧头?
1
A
回答
2
(当前)内核源代码的问题定义方法方式如下:
int eth_header(struct sk_buff *skb, struct net_device *dev,
unsigned short type,
const void *daddr, const void *saddr, unsigned len);
所以我们做有type
场。到现在为止还挺好。
我们来看看该方法的实现,是否以及如何考虑type
的值。该方法开始是这样的:
{
struct ethhdr *eth = ...
if (type != ETH_P_802_3 && type != ETH_P_802_2)
eth->h_proto = htons(type);
else
eth->h_proto = htons(len);
...
正如我们所看到的,所有类型,但802.2/3的type
(传递给函数)的值用于初始化帧头,这是我们想要的东西用于以太网II帧头。
结论和对问题的回答:是,可以使用eth_header()
创建以太网II帧头。
0
参考net/ipv6/netfilter/ip6t_REJECT.c
和net/ethernet/eth.c
:
nskb = skb_alloc(...);
...
struct ethhdr *eh = skb_push(nskb, sizeof(struct ethhdr));
eh->h_proto = htons(ETH_P_IPV6);
你可以改变分配的字节数量和/或根据您要添加到该数据包是什么推动。
相关问题
- 1. 如何确定以太网II帧的长度?
- 2. 在Windows上发送原始以太网II帧时,我必须提供FCS吗?
- 3. 来自NIC的以太网帧
- 4. 从UDP端口接收以太网帧
- 5. 识别帧,以太网或IEEE 802.3?
- 6. 大型以太网帧(超大型)?
- 7. 以太网头是什么样的?
- 8. 什么是可以发送的以太网帧样本?
- 9. 在Wireshark中为非以太网数据创建Lua解析器
- 10. 用ns-3创建两个无线网络和一个以太网网络
- 11. Python原始套接字(Windows)中:嗅探以太网帧
- 12. 如果fcs失败,以太网请求一个新的帧?
- 13. Python在Windows上使用套接字读取以太网帧?
- 14. 以太网信息
- 15. 以太网类型
- 16. 以GWT开头:创建类似于chucknorrisfacts.com的网站
- 17. 从头开始创建网站
- 18. 如何从头创建移动网站
- 19. MySQL性能 - 100Mb以太网与1Gb以太网
- 20. 动态帧创建
- 21. 以可变帧频逐帧创建Motion JPEG
- 22. 从以太网报头打印MAC地址
- 23. 了解带有以太网报头的tcpdump跟踪
- 24. recvfrom的以太网报头不如预期
- 25. 使用Perl的Net :: Frame :: Simple模块重写以太网报头
- 26. 如何检查以太网报头是否输入IEEE 802.1Q?
- 27. 创建从CSV新的熊猫数据帧,没有头
- 28. 以太网100Base-TX与T4
- 29. 关闭以太网PHY
- 30. 以太网视频流
感谢您的回复。举例来说,我有一个类型字段为8100(vlan tagging),所以当我调用这个函数时,我应该通过ETH_P_802_2来输入字段,并且将8100输入到len字段。那是否正确? – user1023527 2012-01-02 06:28:36
@ user1023527:Actullay这可以工作(至少使用当前源) - 但我建议通过'ETH_P_8021Q'(通过'/ usr/src/linux/include/linux/if_ether.h') 'type'并通过'len'传递任何东西('0')。 – alk 2012-01-02 07:54:27
@ user1023527:*“VLAN tagging *”为802.1Q('ETH_P_8021Q'),'ETH_P_8021Q'又定义为'#define'为'8100'。 – alk 2012-01-04 07:54:12