You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在无监听程序的Ubuntu 18.04(模拟QNX环境)中实现TCP数据包回传?

如何在无监听程序的Ubuntu 18.04(模拟QNX环境)中实现TCP数据包回传?

当然可以实现!你遇到的核心问题是:没有用户态监听进程时,内核会直接发送RST包拒绝TCP连接,所以netcat才会立刻退出。下面给你两种可行方案,分别对应「能建立完整TCP连接并回显消息」和「仅回传数据包(无需完整连接)」的场景:

方案一:利用内核自带的Echo服务(支持完整TCP连接)

Echo服务是TCP/IP标准服务之一,由内核或xinetd/inetd托管,不需要额外安装程序,刚好符合你不能加载第三方监听程序的要求。

操作步骤:

  1. 开启Echo服务
    Ubuntu 18.04默认用xinetd管理标准服务,先检查配置文件:

    sudo nano /etc/xinetd.d/echo
    

    把其中的disable = yes改成disable = no,保存退出后重启xinetd:

    sudo systemctl restart xinetd
    

    (如果系统用的是inetd,编辑/etc/inetd.conf,去掉echo stream tcp nowait root internal这行的注释,然后重启inetd即可)

  2. 配置iptables转发规则
    把外部请求的目标端口(比如你用的80)转发到本地Echo服务的端口(默认是7):

    # 开启IP转发
    echo 1 > /proc/sys/net/ipv4/ip_forward
    # 允许本地接口路由外部流量
    sudo sysctl -w net.ipv4.conf.ens4.route_localnet=1
    # DNAT规则:把80端口的TCP请求转发到本地127.0.0.1:7
    sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 127.0.0.1:7
    # 允许Echo服务的流量通过
    sudo iptables -A INPUT -p tcp --dport 7 -j ACCEPT
    sudo iptables -A OUTPUT -p tcp --sport 7 -j ACCEPT
    
  3. 测试验证
    在客户端运行:

    nc <你的Ubuntu服务器IP> 80
    

    现在输入任意内容,回车后就能收到一模一样的回显,完美实现消息收发!

方案二:用iptables的MIRROR模块(仅回传数据包,无需完整连接)

如果连xinetd都不能启动,那可以用内核的xt_MIRROR模块,它能直接把收到的数据包原封不动回传给客户端,不需要任何用户态进程。

操作步骤:

  1. 加载MIRROR模块

    sudo modprobe xt_MIRROR
    
  2. 添加iptables规则
    让目标端口80的TCP数据包全部回传:

    sudo iptables -A INPUT -p tcp --dport 80 -j MIRROR
    
  3. 测试验证
    运行nc <服务器IP> 80时,你会看到连接被重置(因为没有完成TCP三次握手),但用tcpdump抓包就能看到:客户端发送的每个数据包都被服务器原样回传了:

    sudo tcpdump -i ens4 port 80
    

其他替代思路

如果上述方法都受限,还可以试试:

  • 调整内核参数禁用RST包:通过修改net.ipv4.tcp_rst_timeout等参数,让内核不主动发送RST,但这种方法只能让客户端认为连接已建立,无法实现消息回传。
  • 临时使用Netfilter队列模块:加载nfnetlink_queue模块,配合极简的C程序处理数据包,但这需要编译内核模块,可能不符合你的license限制。

备注:内容来源于stack exchange,提问作者kingvittu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.22 12:05:32