问题标签 [raw-ethernet]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
295 浏览

c - 为什么在目标接口上没有收到以太网数据包?

我在安装在 VirtualBox 上的 Ubuntu 17.04 上运行http://hacked10bits.blogspot.co.uk/2011/12/sending-raw-ethernet-frames-in-6-easy.html上的 ethersend.c 程序。

VM 有两个带有 MAC 地址的接口,如下所述:

我将帧从 enp0s3 发送到目的地 08:00:27:1e:7f:5c,即发送到 enp0s8。

当我使用 tcpdump 在 enp0s3 上收听时,我可以看到数据包:

但是,当我使用 tcpdump(数据包应该到达的地方)收听 enp0s8 时,我在 tcpdump 中看不到任何输出。

为什么数据包没有到达 enp0s8?

编辑: enp0s3 是一个 NAT 适配器,而 enp0s8 是一个仅主机适配器。可能这是导致问题的原因。现在我添加了另一个名为 enp0s9 的仅限主机的适配器,现在通信间歇性地工作。为什么它不总是有效?

0 投票
1 回答
586 浏览

python - 从头开始编写以太网桥接器

问题:

如何在代码中创建一个双线程桥接器(不使用brctl addbr br0或一些类似的网络方法,而是编写代码),其中一个从 ETH1 获取以太网帧并将它们放在 ETH2 上,而另一个从 ETH2 获取它们并将它们放在ETH1 以某种方式使两个进程不连续读取彼此的以太网帧?

细节:

我正在尝试创建一个设备来保护系统之间的连接(对于很多我们无法更新的旧系统),为了做到这一点,我们需要将这个设备与另一个系统连接到旧系统的以太网端口上面向网络的以太网端口。基本上是一个硬件中间人。

我可以使用标准以太网桥和一些花哨的 IPTables 前后路由规则来完成几乎所有我需要的事情,但我想尝试实现一些代码来做到这一点。我已经在 C 和 Python 中尝试过这个,我最终创建了一个无限循环的以太网帧。例如,在 C 中,我可以打开一个到 ETH1 的套接字,以便在混杂模式下读取:

然后我打开一个到 ETH2 的套接字进行写入,我可以在两者之间设置程序逻辑。只要两个线程(C 中的 pthreads,Python 中的 threading.Thread)没有同时运行,ETH1->ETH2 就可以像 ETH2->ETH1 一样完美地工作。如果是这样,那么这个过程就像一座桥梁,所有的地狱都失败了。

ETH1->ETH2 线程从 ETH1 读取以太网帧并将它们写入 ETH2。当 ETH2->ETH1 线程去读取 ETH2 以太网套接字时,它会读取另一个线程写入的帧,然后无限循环开始。

Python 版本看起来很相似,但我尝试过使用 pcapy 和 dpkt,但都不起作用。我遇到了一个似乎遇到过类似问题的Scapy 桥问题,但那里的答案似乎并没有解释为什么会发生这种情况或真正如何解决它,而且Bogdan Paun的代码很好,但掩盖了如何如果一个人想学习来解决这个问题。

0 投票
2 回答
118 浏览

macos - macOS 上的用户应用程序可以接收原始以太网数据包吗?

macOS 上的用户应用程序可以接收原始以太网数据包吗?我有一块硬件使用它自己的自定义以太网协议并定义了它自己的以太网类型。无论如何我可以创建一个发送/接收这些数据包的用户应用程序吗?Mac OS 不支持 AF_PACKET。我相信 Berkeley Packet Filter 需要 root 访问权限。还有其他选择吗?

0 投票
1 回答
512 浏览

c - 使用 pcap 自动检索有线以太网接口名称

我有一个在数据链路层发送/接收数据包的应用程序,即通过有线以太网连接从 MAC 地址发送到 MAC 地址的帧。

我正在使用 pcap 库来执行此操作。

ip a从终端运行返回:

我的操作系统是 ubuntu 16.04,它使用 systemd 可预测的网络接口命名。在此实例中,有线以太网接口的名称是enp0s25

目前我在我的应用程序中有这个硬编码,即

我想要做的是动态检索有线以太网接口的名称,以便它仍然可以在以太网接口名称可能不同的设备上工作enp0s25

我已经实现:

这允许我遍历所有接口名称。

我的问题是如何选择与有线以太网接口对应的名称?

我尚未在多个设备上测试我的代码,因此不确定接口名称可能与enp0s25.

有线以太网接口总是以 开头enp吗?

在这种情况下,解决方案可能是strcmp在检索到的接口名称的第一个 3 个字符上做一个?

0 投票
1 回答
42 浏览

tcp - 以太网帧传输层识别

最近我一直致力于嵌入式系统中的原始以太网支持。主要用于教育目的和专业知识。使用在谷歌上找到的一些数据,我能够实现 ARP 支持,以及单独的 UDP/TCP 传输层支持。不幸的是,我在同时支持它们(UDP/TCP)时遇到了问题。基本上我无法识别传入的帧协议,因此无法决定是将其发送到 UDP 还是 TCP 处理程序。无法将其发送给两者,而不会冒获取格式错误数据的风险。我期望一些位域表示​​该信息,但找不到它。

我正在寻找这些信息好几天,但找不到任何来源,可能是因为我误解了一些东西。

我可以通过解释主题/提示去哪里寻找一些更有经验的 IT 来寻求帮助吗?我觉得我在死胡同。

先感谢您。

0 投票
1 回答
307 浏览

ethernet - Ethernet Type Range

When reading through the Ethernet frame format in IEEE 802.3 , the EtherType was explained as below:

  1. 0 - 1500 (Decimal) comes under packet data payload length.
  2. 1536(0x600) and above it means the value is determining the type of the frame.(Eg. 0x800 stands for IPV4)

What about the values in between 1501 to 1535? Why these values been left off?

Note: On the Wiki link it is been mentioned it is not defined. But not finding as explanation in any standardized documents.

0 投票
1 回答
251 浏览

tcp - 如果我在以太网 II、巨型帧和 DIX 的数据中间和数据包末尾看到以太网 FCS,该怎么办

我们知道FCS是以太网数据包帧结构的结束部分,通过检查FCS部分我们可以发现数据传输中是否发生了错误。我有一个关于在 ETHERNET II 或 DIX 数据包中检查 FCS 的问题,这些帧在其帧​​结构中没有数据包长度,如果我遇到数据中间存在正确 FCS 的数据包,我该怎么办。例如,数据包在字节 128 处有 512 字节的长度我看到正确的 FCS 直到字节 128 但实际上还有一些字节,最坏的情况是在正确长度的末尾我看到 FCS 错误,除了数据包长度是框架结构中没有提到我该怎么办?我在巨型帧 (802.3) Ethernet II 和 DIX 中看到了这个问题

0 投票
1 回答
167 浏览

c - 以太网类型 0x0101 不适用于原始套接字

我试图发送一个以太网类型为 0x0101 的原始数据包,但它似乎无法正常工作,如果我使用以太网类型 0x1000 它工作正常。基本上我打开一个原始套接字:

因此,iana以太网类型 0101-01FF 是实验性的,因此据我所知可以用于实验。

如果我使用 0x0101 tcpdump 显示:

而当我使用 0x1000 时显示:

我错过了什么?

0 投票
3 回答
304 浏览

c# - C++ 创建 NdisProt 驱动程序的句柄

我尝试写入 NdisProt 驱动程序并发送原始以太网数据包。我将一些 C++ 命令导入到我的 C# 程序中,以便我可以访问驱动程序。当我尝试打开驱动程序的句柄时,我总是得到一个无效的句柄。我已经尝试使用“NdisProt”作为路径,但它没有解决它。你有什么建议为什么我得到一个无效的句柄?

如果您现在有任何其他解决方案可以在 C# 程序中发送原始以太网数据包,请告诉我。

谢谢你的帮助!

0 投票
1 回答
151 浏览

raw-ethernet - 802.3bp协议中的UCT定义

当我阅读 802.3bp-2016 协议时,我遇到了一个术语“UCT”,我找不到它的定义。例如,在图 97-13 RFER 监控状态图中,有一个从 INIT_CNT 到 WAIT 状态的 UCT 流。谁能帮我理解这个定义?