Kaip patikimai sugeneruoti „Ethernet“ rėmo klaidas programinėje įrangoje?

Klausimas:

Testuoju laidų gedimų paieškos programinės įrangos skyrių ir norėčiau patikimai ir atkuriamai sugeneruoti laidų gedimus. „cat5“ kabelis.

Šiuo metu aš naudoju nesuktą kabelį, kurio ilgis yra metras, ir rankiniu būdu vingiuoju kabelį šalia maitinimo šaltinio, tačiau negaliu aptikti jokių programos gedimų (aš skaitau Ethernet ASIC gedimų skaitiklius nuo Ethernet ASIC .) Ar tai yra dėl to, kad nėra sugedimų, ar dėl to, kad programinės įrangos / aparatūros aptikimas yra sugedęs, negaliu pasakyti.

Ar yra būdas tai padaryti programinėje įrangoje?

Aš pasiryžčiau parašyti ką nors aukštesnio lygio kalba, pvz., „Java“ ar „python“, ir kaip kraštutinė priemonė būčiau pasirengusi jį sudėti C, bet aš tikrai nenorėčiau perrašyti „Ethernet“ tvarkyklės vien tik ištaisyti galimą klaidą.

[Redaguoti]: Noriu sukurti kabelių gedimus - jų neaptikti.

[Redaguoti]: Didelius failus per FTP ir SCP persiunčiau be problemų dėl apdoroto kabelio ir nematau klaidų tikrinant srautą naudojant „wireshark“

[EDIT]: Taip pat žiūrėkite panašų klausimą „python“ .

Sprendimas:

Na, praleidę per dieną kovoje su C, tai yra pitonas sprendimas.

Pirmiausia išjunkite automatinį Ethernet kortelės kontrolinį sumavimą:

sudo ethtool -K eth1 tx off

Tada atsiųskite savo gudrų rėmelį iš 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)

Kas sakė, kad tai turi būti sudėtinga ...

PS: I Love Python .

16
задан Community 23 May 2017 в 12:33
поделиться