我在软件和服务器之间的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
在服务器(实际上是中间)这个连接已经断开,服务器回复了Reset包。
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规则写入目标端口?