Pergunta

Pergunta:

Eu estou testando uma seção de software constatação cabo a falhas, e eu gostaria de gerar de forma confiável e reprodutível falhas de cabo em um cabo CAT5.

No momento eu estou usando um metro de comprimento do cabo sem torção, e furtar o cabo manualmente ao lado de uma fonte de alimentação, mas não posso detectar eventuais falhas na aplicação (estou lendo os contadores de falhas Ethernet fora do ASIC Ethernet .) se isto é porque há falhas são gerados, ou porque a detecção de software / hardware está com defeito, eu não posso dizer.

Existe uma maneira de fazer isso em software?

Eu me contentaria para escrever algo em uma linguagem de alto nível, como Java ou Python, e como último recurso, estaria disposto a colocá-lo juntos em C, mas eu realmente prefiro não re-escrever um driver Ethernet puramente para corrigir um possível erro.

[EDIT]:. Quero criar falhas de cabo - não detectá-los

[EDIT]: eu transferida grandes arquivos através de FTP e SCP sem problemas com o cabo adulterada, e não vejo nenhum erro chegando ao inspecionar o tráfego com Wireshark

[EDIT]: Veja também a pergunta semelhante em python .

Solução:

Bem, depois de passar mais de um combate dia com C, esta é a solução python.

Primeiro checksumming automática disable da placa ethernet:

sudo ethtool -K eth1 tx off

Em seguida, enviar o seu quadro desonesto de 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)

Quem disse que tinha que ser complicado ...

PS:. Eu amo Python

Foi útil?

Solução

Se você estiver trabalhando em C, você pode enviar um quadro Ethernet crua usando socket(AF_PACKET, SOCK_RAW, ...), e passando um ponteiro para um buffer crua que você gerou-se (por exemplo, seguindo o layout da estrutura em wikipedia )

.

Tem sido um longo tempo desde que eu fiz isso, então eu não vou tentar escrever um código representante trecho ...

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top