我正在尝试创建一个测试环境来测试客户端和服务器之间网络错误的处理。我也无法更改软件。这两个设备将通过Linux网桥连接,我将使用各种带宽整形工具来限制带宽或阻止流量,以模拟各种错误情况。
我需要做的另一件事,我不知道如何实现,是在现有连接上生成套接字错误。我更喜欢使用现有的Linux工具/实用程序,但也许可以用足够的指导编写自己的工具/实用程序。我非常熟悉基本的网络,TCP和UDP以及所有这些,但不是桥接。
任何人都可以建议我可以生成套接字错误的方法,例如通过触发意外的FIN数据包,到通过网桥连接的套接字的两端?
提前致谢。
答案 0 :(得分:4)
您可以使用scapy FIN或RST数据包轻松地在网桥中进行嗅探(通常是br0)并制作正确的RST或FIN数据包。
这是一个例子,其中RST是在包含数据的数据包的相同方向上发送的。
#!/usr/bin/python
from scapy.all import *
import random
def sendRST(p):
flags = p.sprintf("%TCP.flags%")
if flags != "S":
ip = p[IP] # Received IP Packet
tcp = p[TCP] # Received TCP Segment
if ip.len <= 40:
return
i = IP() # Outgoing IP Packet
i.dst = ip.dst
i.src = ip.src
t = TCP() # Outgoing TCP Segment
t.flags = "R"
t.dport = tcp.dport
t.sport = tcp.sport
t.seq = tcp.seq
new_ack = tcp.seq + 1
print "RST sent to ",i.dst,":",t.dport
send(i/t)
while (1):
PKT = sniff (iface = "br0", filter = "tcp and src host x.x.x.x", count=1, prn=sendRST)
exit()
检查嗅探的选项,这是非常强大的:)
希望能帮到你。