有没有一种简单的方法(或者是否有可能)在 TCP 数据包离开机器时重写它?
例如,如果我跑
telnet binfalse.de 22
它会寻找一个未使用的端口来离开机器。在这种情况下是46576
:
root@srv % lsof -i -P -n | grep telnet
telnet 10150 user 3u IPv4 1159425 0t0 TCP 1.2.3.4:46576->87.118.88.39:22 (ESTABLISHED)
但现在我想重写这些数据包,让服务器认为请求来自 port 1337
,或者类似这样。当然,我知道我不必期待在telnet
会议中得到答案。
编辑:
当然,在1337
另一个节目上正在听,所以告诉telnet
说出来1337
是没有选择的......
答案1
假设您正在谈论 Linux,iptables
有一个mangle
表可以对传出 TCP 流量执行各种疯狂的操作。 iptables
NAT 功能也可能有所帮助,因为听起来您确实想要进行“端口地址转换”或“手动 NAT”。
答案2
如果您确实使用该telnet
协议(或原始 tcp 流),则可以使用nc -p <source_port>
...-t
协商 telnet 选项。我下面有一个终端服务器,它接受 telnet 连接tcp/2015
,我将从tcp/31415
# Window 1
[mpenning@hotcoffee ~]$ nc -p 31415 -t 192.168.12.117 2015
????????????????
8024-1(config-if-Po2)#
核实...
[mpenning@hotcoffee tshark_wd]$ netstat -an | grep 31415
tcp 0 0 192.168.12.236:31415 192.168.12.117:2015 ESTABLISHED
[mpenning@hotcoffee tshark_wd]$
这假设您还没有侦听本地套接字tcp/31415
...如果您已经在所需端口上绑定了本地 tcp 套接字,iptables
这是您唯一的选择。