android - android 热点上的网络服务器 - 它的 IP 是多少?

标签 android ip webserver android-networking hotspot

我想将一部 Android 手机设置为 wifi 热点,然后在其上运行网络服务器,并从连接到热点的另一部手机浏览它。

我的手机没有 root,但我有 termux ,其中有许多 unix 实用程序。我不想安装额外的应用程序。 (但很高兴写一个!)

我可以在 http://localhost(在主机上)上查看 python 的简单网络服务器,但不能在另一部手机上查看。我尝试使用主机电话的面向公众的 IP(使用 whatsmyip 类型的网页检查它),但没有用。 有人说移动 ISP 通过映射不同的内部和外部 IP 来防止这种情况...但在这里,它不通过 ISP,只是热点...

我还尝试了来自 ifconfig 和来自 android 中的 wifi 控件的 IP 地址,确实适用于 netcat - 但只有 IP连接到热点的客户端手机(不是主机)。

netcat在连接到热点的手机上监听,然后热点手机上的netcat连接到它。 (即角色互换:热点客户端是 netcat 服务器)。奇怪的是,热点电话似乎没有 IP(至少,到目前为止我还没有发现)。但它必须有一个,不是吗,netcat 才能连接...?

无论如何,我想要热点主机上的网络服务器,所以我需要它的 IP 来连接到它...有没有办法得到它?

这个问题困扰我很久了。 非常感谢您的帮助!

编辑 this question 的答案说它(几乎)总是 192.168.43.1。我现在不能尝试;有的时候会更新。

更新
1. 192.168.43.1 有效
2. py http.server 适用于常规文件(例如 txt、pdf),但视频文件似乎需要一些它缺少的流协议(protocol)。我发现 lighttpd 有这个(在 termux 中可用 apt install lighttpd)。但它需要配置(并且不需要 eg/default)。我用过:

$ cat > lighttp.conf
dir-listing.activate = "enable"
server.port = 8000
server.document-root = "MY PATH HERE"
$ lighttpd -D -f lighttpd.conf

目录列表使它更容易使用,但显然这里没有配置安全性,所以要小心你提供的内容。
3. Android(无论如何,我的 5.1)需要关闭飞行模式才能使其成为 wifi 热点 - 这对于互联网访问很有意义......但是在这里,我只希望客户端可以访问主机,而不是可以访问它到整个互联网。所以我发现你可以关闭数据访问来防止这种情况发生,热点仍然有效。 (肯定有一种方法可以通过编程方式在飞行模式下创建热点...)

给你!手机作为媒体服务器。

最佳答案

public static String getDeviceIpAddress( ) {
String deviceIpAddress = "###.###.###.###";

try {
    for (Enumeration<NetworkInterface> enumeration = NetworkInterface.getNetworkInterfaces(); enumeration.hasMoreElements();) {
        NetworkInterface networkInterface = enumeration.nextElement();

        for (Enumeration<InetAddress> enumerationIpAddr = networkInterface.getInetAddresses(); enumerationIpAddr.hasMoreElements();) {
            InetAddress inetAddress = enumerationIpAddr.nextElement();

           if (!inetAddress.isLoopbackAddress() && inetAddress.getAddress().length == 4) 
            {
                deviceIpAddress = inetAddress.getHostAddress();

                Log.e(TAG, "deviceIpAddress: " + deviceIpAddress);
            }
        }
    }
} catch (SocketException e) {
    Log.e(TAG, "SocketException:" + e.getMessage());
}

return deviceIpAddress;
}

我想这对你有帮助。

关于android - android 热点上的网络服务器 - 它的 IP 是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47596679/

相关文章:

Android 任何适用于离线工作的 android 2.3 或更高版本的语音到文本的 API?

android - ItemTouchHelper 和 SwipeRefreshLayout (RecyclerView)

javascript - 处理自动IP输入?

java - 如何获取局域网中的 IP 地址列表?

html - 创建一个指向非 80 端口的 IP 的域名

java - 在 Eclipse 中运行 Web 服务器

android - 如何从 vimeo 帐户检索视频源以在 exoplayer android 中播放?

ruby-on-rails - 启动服务器绑定(bind)到 0.0.0.0 和 127.0.0.1 有什么区别?

database - 架构 Web 服务器、应用程序服务器和数据库服务器

android - 与父Activity通信,刷新父Activity