crabkun / switcher

一个多功能的端口转发/端口复用工具,支持转发本地或远程地址的端口,支持正则表达式转发(实现端口复用)。
BSD 3-Clause "New" or "Revised" License
424 stars 96 forks source link

作者你好.switcher的一些问题 #8

Closed Lundy8899 closed 3 years ago

Lundy8899 commented 3 years ago

在测试当中.没有发现什么问题. 请问一下.在系统已经开放了8888端口的情况下. 可以继续监听8888端口.然后来执行转发吗? 我这样测试了并不行..(类似与horseb的 yajing2010 那样效果,)

crabkun commented 3 years ago

你好,不支持的。两个套接字绑定到同一个端口会导致其中一个套接字listen错误。 不过你可以换个思路,比如说原8888端口是绑定在0.0.0.0上,你可以把本程序绑定在指定IP(通常是网卡)的同个端口上。这样不会错误而且优先级高于0.0.0.0.

比如说,你服务器(网卡IP:192.168.0.123)原本HTTP服务监听了0.0.0.0:80 那么你可以把本软件监听在192.168.0.123:80,而且当外面访问你服务器的80端口的时候实际上是访问到了本软件。然后你再在软件里面写规则转发到127.0.0.1:80,就会转发到原有HTTP服务了

Lundy8899 commented 3 years ago

谢谢作者的建议,后面我也是根据你是思路来测试.确实不错. 不过测试过程中有个小问题. 正常没有开启软件时候.访问80端口.然后长时间不浏览网页.正常是会关闭80端口的连接的. 而开启软件后.软件监听192.168.0.123:80,访问后转到127.0.0.1:80.功能都正常. 但是有2个问题. 第一.当不再浏览网站.netstat -an 中 一直保留着 TCP 192.168.0.123:80 192.168.0.100:65315 CLOSE_WAIT 等待了半个小时,还是一直处于CLOSE_WAIT

第二个问题.在使用过程中.进程出现这样的error.但是没什么影响好像 time="2021-07-04T03:58:32+08:00" level=error msg="[ ] unable to handle c onnection (192.168.0.100:53735) because failed to get first packet : read tcp 19 2.168.0.123:80->192.168.0.100:53735: i/o timeout"

crabkun commented 3 years ago

你好 第一个问题应该是我这边的问题,我检查代码后发现在异常的情况下没有关闭掉客户端的连接,我刚已经提交代码修复了,感谢反馈! 第二个问题是正常的,因为正则模式需要根据客户端第一个数据“包”来判断协议,所以会等待客户端发送。上面的情况是客户端连接上来了但未在规定时间内发送第一个数据“包”,所以程序会断开它的连接并报一条error日志。这个超时时间可以在first_packet_timeout配置项设置。如果你不需要error日志,可以去core.go的第82行删掉或者把Errorf改为Debugf