【问题标题】:Can I port forward from one interface port to another interface port?我可以从一个接口端口转发到另一个接口端口吗?
【发布时间】:2019-08-31 10:26:30
【问题描述】:

我正在“编程 TCP 套接字”并且有一些基本问题。

当我为一个 TCP 客户端指定一个 IP 地址和端口时,我知道这个 IP 地址属于一个网络接口而不是整个实际的计算机,并且计算机有多个网络接口,包括向内的本地主机环回接口。

指定给 TCP 客户端的端口是否属于指定的接口?例如,是否可以有两个相同编号的端口但在两个不同的接口上?像接口A的5000端口和接口环回的5000端口?

我问这个,因为我正在尝试创建一个 TCP 客户端,它将通过套接字连接到在 Android 虚拟设备上运行的 TCP 服务器。 TCP客户端运行在机器A上,android模拟器运行在机器B上。

我查看了 Android 模拟器的端口转发,并了解到模拟器在虚拟路由器后面运行,并且我必须配置端口转发,以便 TCP 套接字连接可以从一个端口路由到另一个端口,但这些文档仅有关于如何从环回接口(所谓的本地主机)进行端口转发的说明,所以很明显,如果我尝试创建一个到不是环回接口的接口的套接字,我不会得到我的 TCP套接字转发到模拟器,我的 TCP 连接失败。

所以我想知道环回接口上的端口 5000 在向外的网络接口上是否有表亲端口 5000?

我想知道在某个低级别我是否可以从面向外的接口端口 5000 转发到环回接口端口 5000,然后转发到模拟器所在的端口。

这可能吗?

【问题讨论】:

    标签: android sockets tcp port


    【解决方案1】:

    你可以使用端口转发软件

    例如: 在 Windows 上

    stcppipe.exe localhost port port

    在 Mac 上

    ipfw add fwd localhost,port tcp from any to any port via en0

    在 Linux 上

    iptables -t nat -A PREROUTING -p tcp -m tcp --dport21521 -j DNAT --to-destination192.168.0.211:1521

    iptables -t nat -A POSTROUTING -s 192.168.0.0/16 -d 192.168.0.211 -p tcp -m tcp --dport 1521 -j SNAT --to-source 192.168.0.132

    【讨论】:

      【解决方案2】:
      adb -s emulator-5554 forward tcp:5000 tcp:6000
      echo "1" > /proc/sys/net/ipv4/ip_forward
      sudo sysctl -w net.ipv4.conf.enp0s31f6.route_localnet=1
      sudo iptables -t nat -A PREROUTING -p tcp --dport 5001 -j DNAT --to 127.0.0.1:5000
      sudo iptables -A FORWARD -p tcp -d 127.0.0.1 --dport 5000 -j ACCEPT
      

      【讨论】:

        猜你喜欢
        • 2018-12-01
        • 1970-01-01
        • 2023-04-02
        • 1970-01-01
        • 1970-01-01
        • 2020-07-30
        • 1970-01-01
        • 1970-01-01
        • 2021-07-22
        相关资源
        最近更新 更多