monkeyWie / proxyee

HTTP proxy server,support HTTPS&websocket.MITM impl,intercept and tamper HTTPS traffic.
MIT License
1.5k stars 566 forks source link

HTTP代理时(非HTTPS),TCP连接TIME_WAIT时,代理无法连接服务器 #261

Open jaejaking opened 1 year ago

jaejaking commented 1 year ago

我用的InterceptHttpProxyServer跑的程序,里面加了两行打印,某次测试时发现只打印了请求,没有回复的消息,如下图: image 所以我又仔细测试了一下, 客户端ip:192.168.1.20, 服务端IP:192.168.1.52, 服务端端口:10222, 测试方法:postman通过proxyee访问服务端接口。 发现当proxyee访问了一次服务端接口之后,这次是成功的,此时服务端和客户端的TCP连接状态都是ESTABLISHED,说明正常通信;期间不再进行接口访问。 等待大约1分钟,通过netstat命令发现客户端已没有和10222创建的TCP连接,此时在服务端利用netstat发现刚刚的TCP连接变为TIME_WAIT状态(该状态会维持1分钟),说明客户端和服务器断开连接。 在服务端TCP处于TIME_WAIT的时候,用postman通过proxyee再请求服务端,此时proxyee与服务器连接不上!具体如下图: image 但如果再次重新利用postman发起请求,就可以连接上(也就是说在服务端TIME_WAIT之后的第一次连接是连接不上的),此时看服务端的TCP状态,发现他新建了一个TCP连接(此连接可以正常通信),原先的连接仍然处于TIME_WAIT状态,如下图: image 请教一下大神,这是为什么?该如何解决 @monkeyWie @er1c @xyzj91 @smichea

jaejaking commented 1 year ago

从请求过程(4次挥手)来看,既然服务端出现了TIME_WAIT,说明了服务断开是服务器发起的,也就是说代理是被迫断开的。所以应当代理在处理完本次请求后,应当主动断开本次连接。

monkeyWie commented 1 year ago

所以现在问题应该是在后端服务主动关闭TCP连接的时候代理服务没有处理吗

jaejaking commented 1 year ago

不好意思,重新补充回复一下,我用的是postman测试的,所以才会出现我截图描述的这一堆问题,但是Apipost没出现类似问题,您看看这些发现对您有帮助吗?

所以现在问题应该是在后端服务主动关闭TCP连接的时候代理服务没有处理吗