如何搭建可接收外部消息的本地服务器?CTF场景Telnet消息转发方案
CTF场景下本地服务接收Telnet服务器消息的解决方案
一、让Telnet服务器直接访问本地服务的方法
核心是解决本地服务的公网可达性问题,推荐两种实用方式:
内网穿透工具(快速便捷)
用ngrok这类工具把本地端口暴露到公网:- 安装ngrok后,执行命令:
ngrok tcp <本地服务端口>(比如本地服务跑在1234端口就输ngrok tcp 1234) - 命令执行后会生成一个公网TCP地址(格式类似
tcp://x.tcp.ngrok.io:xxxx),把这个地址的IP和端口配置给Telnet服务器,它发送的消息会自动转发到你的本地服务端口。
- 安装ngrok后,执行命令:
路由器端口映射(有公网IP时可用)
如果你的本地机器所在网络有公网IP,进入路由器管理后台找到「端口转发」设置:- 添加一条映射规则,将公网端口(比如5678)指向本地机器的内网IP和服务端口(比如
192.168.1.100:1234) - 将路由器的公网IP和映射的公网端口提供给Telnet服务器即可。
- 添加一条映射规则,将公网端口(比如5678)指向本地机器的内网IP和服务端口(比如
二、其他接收消息的替代方案
如果不想暴露本地服务,也可以用中转或直接监听的方式:
VPS中转服务
在公网VPS上搭建简单的TCP监听程序,先接收Telnet服务器的消息,再按需处理:
示例Python监听脚本:import socket # 监听所有网卡的9999端口 with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: s.bind(('', 9999)) s.listen() conn, addr = s.accept() with conn: print(f"来自{addr}的连接") while True: data = conn.recv(1024) if not data: break print(f"收到消息: {data.decode()}")运行脚本后,把VPS的公网IP和9999端口给Telnet服务器,消息会直接打印在VPS终端;如果需要转发到本地,可通过SSH反向隧道实现:
ssh -R 9999:127.0.0.1:<本地服务端口> <VPS用户名>@<VPS公网IP>。Netcat直接监听
有公网机器的话,直接用nc -lvnp <监听端口>(比如nc -lvnp 9999)启动监听,Telnet服务器发过来的消息会实时显示在终端,适合快速接收文本类消息的场景。反向连接模式
若能控制Telnet服务器主动发起连接,可在本地用nc -lvnp <本地端口>监听,再通过内网穿透工具把本地端口暴露到公网,让Telnet服务器主动连接该公网地址,从而接收消息。
内容的提问来源于stack exchange,提问作者Liraz
相关产品推荐
相关产品推荐

