事实证明,CRC32C 比 CRC32 提供更好的结果(改进的汉明距离和更快的实现)。为什么以太网仍然使用旧的 CRC 32 而不是 CRC32C?
我从这个答案中获取了一个Python片段(稍加修改)来计算以太网crc32帧检查序列:
msg = '00'
data = bytes.fromhex(msg)
print(data)
print(msg)
crc = zlib.crc32(data)&0xFFFFFFFF
for i in range(4):
b = (crc >> (8*i)) & 0xFF
print('{:02X}'.format(b))
Run Code Online (Sandbox Code Playgroud)
00对于它输出的消息,这是此答案8D EF 02 D2的位反转解决方案。到目前为止,一切都很好。
现在这里说,
对包括 CRC 码的接收帧数据运行 CRC 算法将始终导致无错误接收数据的零值,因为 CRC 是数据除以多项式的余数。然而,这种技术可能无法检测错误,其中带有尾随零的数据也将导致相同的零余数。为了避免这种情况,发送方在将 FCS 附加到有效负载数据的末尾之前对其进行补充(每个位都取反)。这样,当数据正确接收时,算法结果将始终是 0xC704DD7B 的 CRC32 残差。
但如果我输入00 8D EF 02 D2计算器,结果是1C DF 44 21,而不是所说的余数。我还尝试了其他组合,因为通常必须反转字节中的位或其他什么(我实际上对所有这些反转的东西感到困惑,但我希望,尝试几种可能性后的良好结果将引导我走向正确的反转),但没有任何成功:
00 D8 FE 20 2D -> 66 40 C3 4A
00 D2 02 EF 8D -> DF 42 14 …Run Code Online (Sandbox Code Playgroud) 如何使用python获得本地网卡的正确MAC /以太网ID?Google/stackoverflow上的大部分文章都建议解析ipconfig/all(windows)和ifconfig(Linux)的结果.在Windows(2x/xp/7)'ipconfig/all'工作正常,但这是一个故障安全方法吗?我是linux的新手,我不知道'ifconfig'是否是获取MAC /以太网ID的标准方法.
我必须在python应用程序中实现一个基于本地MAC /以太网ID的许可证检查方法.
当您安装了VirtualBox或虚拟化应用程序(例如VirtualBox)时,会出现这种情况.在这种情况下,您将获得多个MAC /以太网ID.如果我必须使用解析方法,这不会是一个问题,但我不确定.
干杯
PRASHANT
我有通过rs-232接口(超声脉冲发生器 - 接收器)控制的硬件设备.我需要编写一个程序,将命令从我的计算机发送到设备.然而,不同寻常的是,该设备没有串行端口(DB-9 COM端口),而是具有RJ45插座(以太网插座).该设备随附一个适配器,用于将设备上的以太网端口连接到串行电缆,以便与计算机进行通信.
不幸的是我的电脑没有串口 - 只有一个以太网端口.如果可能的话,我想取消适配器并使用以太网电缆将计算机直接连接到设备.这在物理上是可能的 - 但我不知道如何转换消息协议?例如,我的设备没有用于打开tcp套接字的ip地址?
到目前为止,我一直在使用Boost.asio(在Ubuntu盒子上)通过tcp套接字将消息流发送到支持tcp的其他设备.如果可能的话,我想继续使用Boost.Asio库 - 因为它是跨平台的.我真的不知道从哪里开始 - 我一直使用Boost.Asio库,它很好地隐藏了大部分协议问题.我相信这是可能的,因为有些Windows程序似乎做了类似的事情,请参阅http://com0com.sourceforge.net/
任何指导性建议都会受到欢迎.非常感谢
我有一个Arduino Uno Rev. 3并购买了GSM Shield 和以太网盾.如果我使用Arduino和GSM屏蔽或以太网屏蔽都可以正常工作.但是,我想使用带有GSM屏蔽和以太网屏蔽的Arduino.
我已经在互联网上搜索并且已经读到我在引脚4上有冲突.GSM屏蔽使用引脚4用于SD卡,而以太网屏蔽使用引脚4用于TX.
我能解决这个错误吗?是否可以更改此引脚.
也许最好问电子工程师,因为它可能与物理层的某些事情有关,而不是与编程有关。但是我们都是用户以太网,我知道最小帧大小是64字节,但是我从来没有问过为什么会这样。到现在!有人可以帮我吗?为什么它必须是64个字节长?
由于 CSMA-/CA/CD,我知道当前的以太网技术和它的非确定性行为。我还看到很多关于时间敏感网络的新闻。
谁能简要解释一下 TSN 如何改变或增强定时、同步,它与 IEEE 1588(PTP) 等有什么关系?
我需要某种方法来确定何时建立或禁用以太网连接。我在这里找到了如何使用批处理检查它,但我更喜欢使用 Winapi 和朋友。
是否有某种通知可以实现这一目标?如果没有,是否有一些 api 可以检查现在是否建立了连接(我可以定期检查)?
我对以下用 Python 编写的代码有疑问:
def parse_ethernet(timestamp, packet)
ethernet = dpkt.ethernet.Ethernet(packet)
if isinstance(ethernet.data,dpkt.ip.IP):
parse_ip(ethernet.data)
Run Code Online (Sandbox Code Playgroud)
代码的想法是使用python中的dpkt库解析以太网数据包。我的问题是关于以下行:
if isinstance(ethernet.data,dpkt.ip.IP):
Run Code Online (Sandbox Code Playgroud)
为什么需要证明 ethernet.data 是否是 IP 数据包的实例?以太网数据不是总是包含 IP 数据包吗?
ethernet ×10
networking ×4
python ×3
c++ ×2
crc ×2
crc32 ×2
arduino ×1
boost-asio ×1
conflict ×1
gsm ×1
ip ×1
mac-address ×1
packet ×1
real-time ×1
serial-port ×1
tcp ×1
winapi ×1
zlib ×1