代码之家  ›  专栏  ›  技术社区  ›  hyperpallium

android热点上的Web服务器-它的IP是什么?

  •  6
  • hyperpallium  · 技术社区  · 7 年前

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

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

    我可以在上查看python的简单Web服务器 http://localhost (在主机上),但不在另一部手机上。我尝试使用主机电话的面向公众的IP(使用whatsmyip类型的网页进行检查),但没有成功。

    我还尝试了IP地址 ifconfig 通过android内的wifi控件 为…工作 netcat -但只有客户端电话的IP连接到热点(而不是主机)。

    也就是说, netcat公司 在手机上连接到热点并侦听,然后 netcat公司 在热点手机上连接到它。(即角色交换:热点客户端是netcat服务器)。奇怪的是,热点手机似乎没有 IP(至少,到目前为止,我还没有发现)。但它必须有一个,不是吗 要连接。。。?

    无论如何,我希望热点主机上的Web服务器,所以我需要它的IP连接到它。。。有办法得到它吗?

    这已经困扰了我很多年了。 非常感谢您的帮助!

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

    更新
    1. 192.168.43.1 作品
    2. py http.server 适用于常规文件(例如txt、pdf),但视频文件似乎需要一些缺少的流协议。我找到了 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
    

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

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

    1 回复  |  直到 7 年前
        1
  •  3
  •   greenapps    7 年前
    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;
    }
    

    我想这对你有帮助。