我正在测试一段电缆故障查找软件,我想在cat5电缆上可靠且可重复地产生电缆故障.
目前我正在使用一米长的无线电缆,并在电源旁边手动蠕动电缆,但我无法检测到应用中的任何故障(我正在读取以太网ASIC上的以太网故障计数器.)是否这是因为没有产生故障,或者因为软件/硬件检测有问题,我无法分辨.
有没有办法在软件中执行此操作?
我决定用更高级别的语言编写一些东西,比如Java或python,并且作为最后的手段愿意将它放在C中,但我真的不想重写以太网驱动程序纯粹是为了修复可能的错误.
[编辑]:我想创建电缆故障 - 不检测它们.
[编辑]:我通过FTP和SCP传输大文件而没有使用篡改电缆的问题,我发现在使用wireshark检查流量时没有出现错误
好吧,花了一天时间与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) 我需要在几天内完成一个项目,它是一个基本的客户端和服务器接口.问题是它需要是所有原始套接字.我没有创建它的问题,我只是坚持发送数据包.
首先,我尝试将其绑定到接口'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) 我已经嗅探了一个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 中实现一个 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 进行编程。有人能帮我吗?