相关疑难解决方法(0)

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

题:

我正在测试一段电缆故障查找软件,我想在cat5电缆上可靠且可重复地产生电缆故障.

目前我正在使用一米长的无线电缆,并在电源旁边手动蠕动电缆,但我无法检测到应用中的任何故障(我正在读取以太网ASIC上的以太网故障计数器.)是否这是因为没有产生故障,或者因为软件/硬件检测有问题,我无法分辨.

有没有办法在软件中执行此操作?

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

[编辑]:我想创建电缆故障 - 不检测它们.

[编辑]:我通过FTP和SCP传输大文件而没有使用篡改电缆的问题,我发现在使用wireshark检查流量时没有出现错误

[编辑]:请参阅python中类似问题.

解:

好吧,花了一天时间与C战斗后,这就是python解决方案.

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

sudo ethtool -K eth1 tx off
Run Code Online (Sandbox Code Playgroud)

然后,从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  ]
# ] …
Run Code Online (Sandbox Code Playgroud)

c python networking ethernet raw-ethernet

16
推荐指数
1
解决办法
6470
查看次数

我如何在python中发送原始以太网帧

我需要在几天内完成一个项目,它是一个基本的客户端和服务器接口.问题是它需要是所有原始套接字.我没有创建它的问题,我只是坚持发送数据包.

首先,我尝试将其绑定到接口'en1',但它一直给我一个错误nodename not known.当我将它绑定到我的本地IP地址时,它工作正常.完成此操作后,我创建了一个原始数据包类,它全部为十六进制.然后我做了一个sendto电话,把它发送到电汇上.

问题是,当我使用wireshark捕获数据包时,它显示为ipv4数据包的有效负载.我不希望它自动生成标题,这就是我的原始数据包类.你知道我能拿走这些标题吗?

这是我的代码 - 只有原始函数:

def raw():
    HOST = gethostbyname('192.168.1.10')

    s = socket(AF_INET, SOCK_RAW, IPPROTO_IP)
    s.bind((HOST, 0))

    s.setsockopt(IPPROTO_IP, IP_HDRINCL, 0) #no headers - it wont work!!

    pckt = packet("\x68\x65\x6c\x6c\x6f")
    netpacket = pckt.getpacket()

    print "Sending.. "
    print ""

    s.sendto(netpacket, ('192.168.1.1', 80))
    data = s.recv(4096)
    print data
Run Code Online (Sandbox Code Playgroud)

o这里是捕获的数据包,最后是hello:

007f 2809 6da2 28cf daee 2156 0800 4500 004d 1bfc 0000 4000 db59 c0a8 010a c0a8 0101* 007f     

2809 6da2 28cf daee 2156 0800 4500 0036 2352 4000 4006 …
Run Code Online (Sandbox Code Playgroud)

python sockets ethernet

4
推荐指数
1
解决办法
2万
查看次数

如何在Python中发送具有给定十六进制有效载荷的IP数据包?

我已经嗅探了一个IGMP数据包,现在我想在python的帮助下发送它。有什么办法可以发送像

0x0000   01 00 5E 00 43 67 00 02-B3 C8 7F 44 81 00 00 DE   ..^.Cg..??D?..?
0x0010   08 00 46 00 00 20 00 01-00 00 01 02 36 4C C0 A8   ..F.. ......6L??
0x0020   00 7B EA 00 43 67 94 04-00 00 16 00 BC 97 EA 00   .{?.Cg”.....?—?.
0x0030   43 67                                             Cg
Run Code Online (Sandbox Code Playgroud)

没有像流浪者这样的数据包生成器?

UPD好吧,我尝试使用原始套接字,如下所示:

dst = '234.0.67.103'

# Open a raw socket.
s = socket.socket(socket.AF_INET, socket.SOCK_RAW,2)

res=''

temp='01 00 5E 00 43 67 00 02 …
Run Code Online (Sandbox Code Playgroud)

python sockets igmp

0
推荐指数
1
解决办法
9847
查看次数

原始客户端 - 服务器套接字 python

我想在 Python 中实现一个 RAW 套接字,然后将数据从客户端发送到服务器。

与普通套接字不同,我尝试使用以下定义

s = socket.socket(socket.AF_PACKET, socket.SOCK_RAW)
Run Code Online (Sandbox Code Playgroud)

但命令为

s.listen(1), s.connect()
Run Code Online (Sandbox Code Playgroud)

不工作。我不知道如何对 Client.py 和 Server.py 进行编程。有人能帮我吗?

python sockets client-server raw-sockets

0
推荐指数
1
解决办法
5772
查看次数