【问题标题】:How to get default gateway using Ethernet, not wifi如何使用以太网而不是 wifi 获取默认网关
【发布时间】:2012-06-12 03:01:32
【问题描述】:

我期待知道如何以编程方式找到默认网关地址。 我已经找到了 Wifi-Manager(getDhcpInfo()) 的默认网关地址, 但我在以太网模式下找不到它。 请。帮帮我~~

【问题讨论】:

    标签: google-tv


    【解决方案1】:

    如果您希望一次有两个连接,那么您可以转到命令提示符并检查您公布的路由。如果路由有一个默认网关,那么您可以连接到该特定网络。如果它有两个默认网关,那么你可以访问两个随机的网络

    谢谢 鲍米

    【讨论】:

      【解决方案2】:

      我假设这是针对 Google-TV 的,如果您将 Google-TV 添加到标题中可能会有所帮助。有没有办法在这个设备上静态声明网关?如果有,您可以尝试登录路由器,找到默认网关,然后直接将网关放入设备的配置选项中。

      【讨论】:

        【解决方案3】:

        您可以通过以下方式在以太网上找到 Google TV 设备的 IP 地址:

        private static final String IPADDRESS_PATTERN =
                "^([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\." +
                        "([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\." +
                        "([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\." +
                        "([01]?\\d\\d?|2[0-4]\\d|25[0-5])$";
        
        public String getLocalIpAddress() {
            try {
                for (Enumeration<NetworkInterface> en =
                        NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) {
                    NetworkInterface intf = en.nextElement();
                    for (Enumeration<InetAddress> enumIpAddr =
                            intf.getInetAddresses(); enumIpAddr.hasMoreElements();) {
                        InetAddress inetAddress = enumIpAddr.nextElement();
                        String ipAddress = inetAddress.getHostAddress().toString();
                        if (!inetAddress.isLoopbackAddress()
                                && validate(ipAddress)) {
        
                            return ipAddress;
                        }
                    }
                }
            } catch (SocketException e) {
                // TODO(mjoshi): Auto-generated catch block
                e.printStackTrace();
            }
            return null;
        }
        
        
        /**
         * Validate ip address with regular expression
         * 
         * @param ip ip address for validation
         * @return true valid ip address, false invalid ip address
         */
        public boolean validate(final String ip) {
            Pattern pattern = Pattern.compile(IPADDRESS_PATTERN);
            Matcher  matcher = pattern.matcher(ip);
            return matcher.matches();
        }
        

        【讨论】:

        • 有趣。出于好奇,为什么需要验证 getHostAddress 返回的字符串?它不应该总是有效的吗?
        • 哦。那么我想你也可以使用instanceof Inet4Address
        【解决方案4】:

        这是我们在 Able Remote 中使用的代码。请注意,我们检查接口是否已启动(仅适用于 Android 2.3 及更高版本)。这是必要的,因为用户报告的设备具有多个 IP 地址,但一次只有一个存在:

        public static String getLocalIpAddress() {
                try {
                    for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) {
                        NetworkInterface intf = en.nextElement();
                        if (intf.isUp()) {
                            for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) {
                                InetAddress inetAddress = enumIpAddr.nextElement();
                                if (!inetAddress.isLoopbackAddress()) {
                                    if (inetAddress instanceof Inet4Address) { // only want ipv4 address
                                        return inetAddress.getHostAddress().toString();
                                    }
                                }
                            }
                        }
                    }
                } catch (Throwable e) {
                    Log.e(LOG_TAG, "Failed to get the IP address", e);
                }
        
                return null;
            }
        

        【讨论】:

          猜你喜欢
          • 2011-11-12
          • 2012-11-18
          • 2023-04-07
          • 1970-01-01
          • 2016-09-30
          • 1970-01-01
          • 2021-01-21
          • 1970-01-01
          • 2012-03-04
          相关资源
          最近更新 更多