Question

Question:

Je teste une section de logiciel de découverte câble de défaut, et je voudrais pour générer de manière fiable et reproductible des défauts de câble sur un câble CAT5.

En ce moment je suis sur un mètre de longueur câble sans torsion et tortiller le câble manuellement à côté d'une alimentation électrique, mais je ne peux pas détecter les défauts dans l'application (je lis les compteurs de défauts Ethernet de l'ASIC Ethernet .) que ce soit parce qu'aucun défaut sont générés, ou parce que la détection des logiciels / matériel est défectueux, je ne peux pas le dire.

Est-il possible de le faire dans le logiciel?

Je me contenterais d'écrire quelque chose dans une langue de niveau supérieur, comme Java ou Python, et en dernier recours serait prêt à mettre ensemble en C, mais je préfèrerais ne pas ré-écrire un pilote Ethernet uniquement pour corriger un bug possible.

[EDIT]:. Je veux créer défauts de câble - pas les détecter

[EDIT]: J'ai transféré des fichiers volumineux via FTP et SCP sans problème avec le câble trafiqué, et je ne vois aucune erreur à venir lors de l'inspection du trafic avec Wireshark

[EDIT]: Voir aussi question similaire en python .

Solution:

Eh bien, après avoir passé plus d'un combat de jour avec C, c'est la solution python.

D'abord désactiver checksumming automatique de la carte Ethernet:

sudo ethtool -K eth1 tx off

Ensuite, envoyez votre image de python louches:

#!/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)

Qui a dit qu'il fallait être compliqué ...

PS:. I Love Python

Était-ce utile?

La solution

Si vous travaillez en C, vous pouvez envoyer une trame Ethernet brute en utilisant socket(AF_PACKET, SOCK_RAW, ...), et en passant un pointeur vers un tampon cru que vous avez vous-même généré (par exemple en suivant la mise en page du cadre wikipedia )

.

Il a été longtemps que je l'ai fait, donc je ne vais pas essayer d'écrire un extrait de code représentatif ...

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top