Linux 如何在网桥上生成套接字错误

Linux 如何在网桥上生成套接字错误,linux,networking,Linux,Networking,我试图创建一个测试环境来测试客户端和服务器之间网络错误的处理。我不能在任何一台上更改软件。这两个设备将通过Linux网桥连接,我将使用各种带宽成形工具来限制带宽或完全阻断流量,以模拟各种错误情况 我需要做的另一件事,我还不知道如何实现,就是在现有连接上生成套接字错误。我更喜欢使用现有的Linux工具/实用程序,但在足够的指导下,我可能能够编写自己的工具/实用程序。我非常熟悉基本的网络、TCP和UDP等,但不熟悉桥接 有人能提出一种方法来生成套接字错误吗?例如,通过触发意外的FIN数据包,将套接字

我试图创建一个测试环境来测试客户端和服务器之间网络错误的处理。我不能在任何一台上更改软件。这两个设备将通过Linux网桥连接,我将使用各种带宽成形工具来限制带宽或完全阻断流量,以模拟各种错误情况

我需要做的另一件事,我还不知道如何实现,就是在现有连接上生成套接字错误。我更喜欢使用现有的Linux工具/实用程序,但在足够的指导下,我可能能够编写自己的工具/实用程序。我非常熟悉基本的网络、TCP和UDP等,但不熟悉桥接

有人能提出一种方法来生成套接字错误吗?例如,通过触发意外的FIN数据包,将套接字两端通过网桥连接


提前感谢。

您可以使用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()
#/usr/bin/python
从斯卡皮来的,都是进口货*
随机输入
def发送RST(p):
flags=p.sprintf(“%TCP.flags%”)
如果旗子“S”:
ip=p[ip]#接收到的ip数据包
tcp=p[tcp]#接收到的tcp段

如果叶伦真棒!这看起来正是我所需要的,对于这个和其他我认为我做不到的事情。我希望我能不止一次地否决这个答案。非常感谢。一个问题:sniff()是Python API还是Scapy API?上面的代码会替换发送的数据包还是仅仅由它触发?一些答案:sniff是一个scapy API[。数据包不会被替换,只是一个新的数据包RST被注入了libnet。如果你想替换数据包,你应该使用另一种技术,比如libnetfilter\u queue。谢谢你的问候;)