gpt4 book ai didi

python - 如何在软件中可靠地生成以太网帧错误?

转载 作者:太空狗 更新时间:2023-10-29 16:57:58 27 4
gpt4 key购买 nike

问题:

我正在测试电缆故障查找软件的一部分,我想在 cat5 电缆上可靠且可重复地生成电缆故障。

目前我正在使用一米长的未绞合电缆,并在电源旁边手动扭动电缆,但我无法检测到应用程序中的任何故障(我正在读取以太网 ASIC 上的以太网故障计数器.) 不知道是没有故障,还是软硬件检测有问题,我也说不准。

有没有办法在软件中做到这一点?

我愿意用更高级的语言编写一些东西,比如 Java 或 python,作为最后的手段,我愿意将它们放在 C 中,但我真的不想纯粹重写以太网驱动程序修复一个可能的错误。

[编辑]:我想制造电缆故障 - 而不是检测它们。

[编辑]:我已经通过 FTP 和 SCP 传输了大文件,而篡改电缆没有出现问题,并且在使用 wireshark 检查流量时我没有看到任何错误

[编辑]:另见similar question in python .

解决方案:

好吧,在与 C 战斗了一天之后,这就是 python 解决方案。

首先禁用以太网卡的自动校验和:

sudo ethtool -K eth1 tx off

然后,从 python 发送你的狡猾框架:

#!/usr/bin/env python

from socket import *

#
# Ethernet Frame:
# [
# [ Destination address, 6 bytes ]
# [ Source address, 6 bytes ]
# [ Ethertype, 2 bytes ]
# [ Payload, 40 to 1500 bytes ]
# [ 32 bit CRC chcksum, 4 bytes ]
# ]
#

s = socket(AF_PACKET, SOCK_RAW)
s.bind(("eth1", 0))
src_addr = "\x01\x02\x03\x04\x05\x06"
dst_addr = "\x01\x02\x03\x04\x05\x06"
payload = ("["*30)+"PAYLOAD"+("]"*30)
checksum = "\x00\x00\x00\x00"
ethertype = "\x08\x01"
s.send(dst_addr+src_addr+ethertype+payload+checksum)

谁说一定要复杂...

PS:我喜欢 Python。

最佳答案

如果您使用 C 语言工作,您可以使用 socket(AF_PACKET, SOCK_RAW, ...) 发送一个原始以太网帧,并向它传递一个指向您已经创建的原始缓冲区的指针自己生成(例如,按照 wikipedia 处的框架布局)。

我已经很久没有这样做了,所以我不会尝试编写一个有代表性的代码片段......

关于python - 如何在软件中可靠地生成以太网帧错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6329583/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com