java - 安卓端口转发

标签 java android sockets router

如何使用另一台设备的 IP 将端口从 Android 设备转发到路由器?

我想从外部从 android 设备连接到路由器 public ip:port 以便我可以访问连接到路由器的硬件设备。(Android -> 外部 IP:Port) -> Router -> hardware Device(硬件设备有自己的 IP 和 mac)。

enter image description here

代码:

    PortMapping mapping = new PortMapping();
    UnsignedIntegerTwoBytes externalPort = new UnsignedIntegerTwoBytes(22555L);
    UnsignedIntegerTwoBytes internalPort = new UnsignedIntegerTwoBytes(80L);

    mapping.setDescription("HardwareDescription");
    mapping.setEnabled(true);
    mapping.setExternalPort(externalPort);
    mapping.setInternalClient("192.168.2.68");
    mapping.setInternalPort(internalPort);
    mapping.setProtocol(PortMapping.Protocol.TCP);
    mapping.setRemoteHost("192.168.2.254");


    mUpnpService = new MyUpnpServiceImpl(new PortMappingListener(mapping));
    mUpnpService.getRouter();
    mUpnpService.getControlPoint().search(SCAN_TIMEOUT);

UpnpServiceImpl:

private class MyUpnpServiceImpl extends UpnpServiceImpl {

    public MyUpnpServiceImpl(RegistryListener... listeners) {
        super(new AndroidUpnpServiceConfiguration(getWifiManager()),
                listeners);
    }

    @Override
    public Router getRouter() {
        return super.getRouter();
    }
    @Override
    protected Router createRouter(ProtocolFactory protocolFactory,
            Registry registry) {
        return new AndroidWifiSwitchableRouter(configuration,
                protocolFactory, getWifiManager(), getConnectivityManager());
    }
}

上面的代码没有崩溃,但也没有创建任何端口!

这可能吗? 如果答案是肯定的,你能给我指出正确的方向吗?

最佳答案

找到了这个问题的答案。 第一步是在路由器上启用 UPNP 选项,此步骤后导入库 net.sbbi.upnp 搜索路由器 (IGD) 设备并使用方法 addPortMapping .

这是一个示例,适用于任何想要使用任何 IP 在路由器上打开 o 端口的人,而不仅仅是从运行该应用程序的当前设备。

https://github.com/ManolescuSebastian/Port_Forward_Android

关于java - 安卓端口转发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22399994/

相关文章:

java - 遍历 lazyDataModel

java - Android 将 MSAL 添加到应用程序会导致用户名不能为空

android - 刷新后我会得到 C2DM 注册 ID 吗?

java - 有没有办法在匿名类中初始化最终字段?

java - launch4j:通过命令行覆盖默认 JVM 堆大小

java - 使用 getMapAsync 时获取空指针

java - java 文件中的扩展 ascii

c - 如何交换两个打开的文件描述符?

java - Android 通过各种 Activity 使 BT 套接字保持 Activity 状态

java - 为什么我的服务器 PrintWriter.println() 无法通过套接字发送消息?