【问题标题】:Using iptables to emulate broken connection使用 iptables 模拟断开的连接
【发布时间】:2017-05-12 22:16:17
【问题描述】:

我的软件和服务器之间的 tcp 通信有一些错误。在超时路由器静默关闭连接而不通知客户端(通常它是用 FIN 数据包制作的)。

我在这种情况下的 tcpdump 日志:

Soft 尝试在打开的连接中推送消息。

09:29:41.438050 IP CLIENTIP.33668 > SERVERIP.8101: Flags [P.], seq 163:228, ack 144, win 229, options [nop,nop,TS val 96713087 ecr 4169733508], length 65

在服务器(实际上是中间)端,此连接已断开,服务器使用重置包进行响应。

09:29:41.447415 IP SERVERIP.8101 > CLIENTIP.33668: Flags [R], seq 3072817047, win 0, length 0

我正在尝试调试这种情况,但这种情况仅在相当长的超时后才会发生。

我的想法是使用 iptables 来模拟这种情况。例如更改我的客户的目标端口:

sudo iptables -t nat -D OUTPUT -p tcp --destination-port 8101 -j DNAT --to-destination SERVERIP:8102

但此规则仅适用于新的 tcp 连接,但我需要更改已建立连接上的数据包内容。有人知道我如何将 tcpdump 规则写入所有包的目标端口吗?

【问题讨论】:

    标签: networking tcp iptables tcpdump


    【解决方案1】:

    您是否考虑过使用 netem 之类的东西来增加延迟或丢弃数据包?我认为它可能比iptables 更适合您。

    【讨论】:

    • 感谢它看起来很有趣,但我还没有找到生成这个 RST 数据包的可能性(模拟静默断开连接)。实际上对于 libpcap 应用程序来说这是相当简单的任务
    猜你喜欢
    • 2014-11-09
    • 2021-07-08
    • 1970-01-01
    • 1970-01-01
    • 2021-12-22
    • 1970-01-01
    • 2022-08-14
    • 2011-08-26
    相关资源
    最近更新 更多