Linux中的简单套接字转发

opc*_*0de 3 c sockets linux

场景非常简单:

使用TCP/IP我有一个客户端连接到我(服务器)我想转发套接字发送给我的数据到我打开的另一个套接字和我从该套接字向后收到的数据.就像一个代理.

现在我有1个线程,一个人从传入连接中侦听,并在建立客户端连接时产生另一个2.我必须使用一种机制在线程中进行通信.

有什么更简单的我可以用来充当TCP/IP代理吗?Linux有套接字转发还是某种机制?

Pau*_*bel 13

您可以使用iptables进行端口转发.它不是交流解决方案,但它是一个具有良好性能且调试次数最少的2行.

从第二个链接:

iptables -A PREROUTING -t nat -i eth1 -p tcp \
         --dport 80 -j DNAT --to 192.168.1.50:80

iptables -A INPUT -p tcp -m state --state NEW \
         --dport 80 -i eth1 -j ACCEPT
Run Code Online (Sandbox Code Playgroud)

第一行从端口80向前移动到端口80在192.168.1.50上,第二行接受连接,保持iptables不丢弃它.

您可以使用其他iptables标志添加其他约束,例如-s 10.0.3.0/24将捕获源为10.0.3.0到10.0.3.255的所有地址

  • 你可以使用额外的标志,比如-s (2认同)

Jon*_*oni 10

一个用户级解决方案正在使用socat.例如,要接受端口8080上的连接并将它们转发到192.168.1.50:9090,您可以使用:

socat TCP-LISTEN:8080,fork TCP:192.168.1.50:9090
Run Code Online (Sandbox Code Playgroud)

fork选项socat允许多个连接.