【问题标题】:How to generate socket errors on network bridge如何在网桥上生成套接字错误
【发布时间】:2011-12-09 05:23:18
【问题描述】:

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

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

任何人都可以建议一种我可以生成套接字错误的方法,例如通过触发意外的 FIN 数据包,到通过网桥连接的套接字的两端?

提前致谢。

【问题讨论】:

    标签: linux networking


    【解决方案1】:

    您可以使用 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()
    

    检查嗅探的选项,它非常强大:)

    希望能帮到你。

    【讨论】:

    • 太棒了!这看起来正是我需要的,对于这个和其他我认为我无法做到的事情。我希望我能不止一次地支持这个答案。非常感谢。一个问题: sniff() 是 Python API 还是 Scapy API?上面的代码也会替换发送的数据包还是只是被它触发?
    • 一些答案​​:sniff 是一个 scapy API [secdev.org/projects/scapy/doc/usage.html#sniffing].数据包没有被替换,只是用libnet注入了一个新的包RST。如果要替换数据包,则应使用其他技术,例如 libnetfilter_queue。谢谢你的问候;)
    猜你喜欢
    • 2018-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多