如果通过JAVA重启路由器和获取IP地址

DI-504路由器管理
本文介绍了一种使用Fiddler工具解析DI-504路由器请求的方法,并通过Java代码实现对其基本认证及发送HTTP请求以获取路由器信息。

1、路由器的用户名和密码我是知道,这里不是hacker技术,是为了方便

2、借助了Fiddler这个工具来对路由器访问的请求进行解析

3、通过Fiddler这个工具让我们了解到DI-504应用的是Basic这个认证方式

4、参考代码:

package com.van.client;

import java.io.IOException;  
import java.io.InputStream;
import java.net.HttpURLConnection;  
import java.net.MalformedURLException;  
import java.net.URL;  
/**
 * 
 * @author van
 *
 */  
public class Router {  
    private static final String USERNAME_PASSWORD = "admin:a";  
    public Router() {  
        this.disconnect();  
    }  
    
    //http://192.168.3.1/do_cmd.htm?CMD=SYS_CONF&CCMD=0&nowait=1重启路由器
    private void disconnect() {  
        String urlStr = "http://192.168.3.1/info.htm";  
        this.runCgi(urlStr, USERNAME_PASSWORD);  
    }  
  
    private void runCgi(String urlStr, String authorizationStr) {  
        URL xUrl = null;  
        HttpURLConnection xHuc = null;  
        try {  
            xUrl = new URL(urlStr);  
            if (xUrl != null) {  
                xHuc = (HttpURLConnection) xUrl.openConnection();  
                if (xHuc != null) {  
                    if (!"".equals(authorizationStr)) {  
                        xHuc.setRequestProperty("Authorization", "Basic "  
                                + Base64.encodeBytes(USERNAME_PASSWORD  
                                        .getBytes()));  
                    }   
                    xHuc.setRequestProperty("Content-Length", "0");  
                    xHuc.setRequestProperty("Content-Type",  
                            "application/x-www-form-urlencoded");  
                    xHuc.connect();  
                    String aa = xHuc.getResponseMessage();  
                    ////下面这些是用来获取IP地址的
                    InputStream in=xHuc.getInputStream();
                    int chint=0;
                    StringBuffer sb=new StringBuffer();
                    while((chint=in.read())!=-1){
                    	sb.append((char)chint);
                    }
                    String html=sb.toString();
                    int first=html.indexOf("wanIP=\"");
                    String content=html.substring(459,471);
                    System.out.println(content);  
                }  
            }  
        } catch (MalformedURLException e) {  
            e.printStackTrace();  
        } catch (IOException e) {  
            e.printStackTrace();  
        } finally {   
            if (xHuc != null) {  
                xHuc.disconnect();  
            }  
        }  
    }  
    public static void main(String[] args) {  
        new Router();  
    }
  
}  

  其中文中引用到的Base64的java文件在插件里面,还有一些API说明

在Android系统中,通过DNS解析特定域名以获取对应的服务器IP地址,通常涉及以下几个关键步骤机制: Android系统使用 `java.net.InetAddress` 类来执行DNS解析操作。该类提供了 `getByName(String host)` 方法,用于将域名解析为对应的IP地址。此方法会优先检查本地缓存,包括Java虚拟机层框架层的缓存。如果缓存中没有对应的解析结果,则会向DNS服务器发起查询请求[^4]。 以下是一个简单的代码示例,演示如何在Android中解析域名并获取IP地址: ```java import java.net.InetAddress; import java.net.UnknownHostException; public class DnsResolver { public static void main(String[] args) { try { InetAddress address = InetAddress.getByName("www.example.com"); System.out.println("IP Address: " + address.getHostAddress()); } catch (UnknownHostException e) { e.printStackTrace(); } } } ``` 在实际运行中,Android系统会根据网络状态自动选择合适的DNS服务器。例如,当设备连接到Wi-Fi网络时,通常会使用路由器配置的DNS服务器;而当使用移动数据时,则会使用运营商提供的DNS服务器。此外,开发者也可以通过 `ConnectivityManager` 获取当前网络接口的DNS服务器信息,从而进行更细粒度的控制[^5]。 如果需要绕过DNS缓存以获取最新的解析结果,可以通过设置 `networkaddress.cache.ttl` `networkaddress.cache.negative.ttl` 系统属性来控制缓存行为。例如,在Java中可以通过以下方式禁用缓存: ```java java.security.Security.setProperty("networkaddress.cache.ttl", "0"); java.security.Security.setProperty("networkaddress.cache.negative.ttl", "0"); ``` 上述设置将使每次DNS查询都直接发送到DNS服务器,避免因缓存导致的解析错误或延迟更新问题[^4]。 ### DNS解析流程 Android的DNS解析流程遵循标准的DNS解析机制。具体来说,系统首先检查本地的hosts文件,然后查询本地DNS解析器缓存。如果这些步骤未能获取到解析结果,则会向首选DNS服务器发起查询请求。如果首选DNS服务器无法解析该域名,则会进一步向根DNS服务器、顶级域DNS服务器等逐级查询,直到找到能够解析该域名的服务器[^2]。 ### DNS缓存管理 Android系统为了提高解析效率,默认会对DNS解析结果进行缓存。成功查询的结果会被缓存一段时间(默认为永久,直到虚拟机重启),而失败的查询结果则仅缓存10秒左右。开发者可以通过调整系统属性来控制DNS缓存的行为,以适应不同的应用场景,尤其是在服务器IP地址频繁变更的情况下尤为重要[^4]。 ### 获取DNS服务器信息 除了直接解析域名外,开发者还可以通过 `ConnectivityManager` 获取当前网络接口的DNS服务器信息。这对于调试网络问题或实现自定义的DNS解析逻辑非常有用。以下是获取DNS服务器信息的示例代码: ```java import android.net.LinkProperties; import android.net.ConnectivityManager; import android.content.Context; public class DnsServerInfo { public static void getDnsServers(Context context) { ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); LinkProperties linkProperties = cm.getLinkProperties(cm.getActiveNetwork()); if (linkProperties != null) { for (InetAddress dnsServer : linkProperties.getDnsServers()) { System.out.println("DNS Server: " + dnsServer.getHostAddress()); } } } } ``` 通过上述方法,可以获取当前网络接口所使用的DNS服务器列表,从而更好地理解控制DNS解析过程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值