android 局域网内对应主机名如何获取IP
How to get IP due to corresponding hostname at LAN in android
我正在寻找一种方法来获取 LAN 中已知主机名的 IP 地址。
我的工作方式是执行网络扫描,扫描从 192.168.1.1
开始到 192.168.1.255
,所以我尝试了 InetAddress.getHostName()
,InetAddress.getCanonicalAddress()
但检索相同的 IP 地址。
我试过使用 nslookup 进行扫描。它在 java 编译器中完美运行,但在 android ..
中是不可能的
由于编译标题时出现错误,我无法测试 dnsjava 库:NoClassDefFoundError
,文件 dnsjava-2.1.7.jar
已添加到 libs 目录。
有什么帮助吗?
*对不起我的英语。
我写了一个有效的代码(至少对我来说是这样)。
我已经对我的微控制器 (ESP8266-NodeMCU) 进行了编程,以写回携带 JSON 对象的 HTML 响应。
所以我通过向从 192.168.1.1
到 192.168.1.255
的每个地址写入一个 http 请求来扫描我的网络。
备注:
- 我使用了
SyncHttpClient
,因为我需要扫描大量地址。我试过 AsyncHttpClient
但没有收到响应。
- 我试过 (
InetAddress.isReachable()
) 方法来过滤地址,它不起作用,因为它总是 return false
.
如果不向请求添加至少 1 个查询参数,我将无法创建 HttpRequest。
boolean found = false;
void getIPAddress() {
for (int i = 1; i < 255; i++) {
if (!found) {
String tryIP = subnet + String.valueOf(i);
Log.d(TAG, "Trying: " + tryIP);
final String finalIP = tryIP;
try {
SyncHttpClient client = new SyncHttpClient();
RequestParams params = new RequestParams();
params.put("check", "1");
client.get("http://" + finalIP , params, new JsonHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, Header[] headers, JSONObject response) {
try {
JSONObject jo = response;
String key = jo.getString("controller");
Log.d(TAG, "Success : " + response + " and key is : " + key);
if (key.equals("esplight")) {
Log.d(TAG, "Found the ESP! Its IP is :" + finalIP);
found = true;
}
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
public void onFailure(int statusCode, Header[] headers, Throwable throwable, JSONObject errorResponse) {
Log.d(TAG, "trying to connect failed ");
}
});
} catch (Exception e) {
}
}
}
}
我正在寻找一种方法来获取 LAN 中已知主机名的 IP 地址。
我的工作方式是执行网络扫描,扫描从 192.168.1.1
开始到 192.168.1.255
,所以我尝试了 InetAddress.getHostName()
,InetAddress.getCanonicalAddress()
但检索相同的 IP 地址。
我试过使用 nslookup 进行扫描。它在 java 编译器中完美运行,但在 android ..
中是不可能的由于编译标题时出现错误,我无法测试 dnsjava 库:NoClassDefFoundError
,文件 dnsjava-2.1.7.jar
已添加到 libs 目录。
有什么帮助吗? *对不起我的英语。
我写了一个有效的代码(至少对我来说是这样)。
我已经对我的微控制器 (ESP8266-NodeMCU) 进行了编程,以写回携带 JSON 对象的 HTML 响应。
所以我通过向从 192.168.1.1
到 192.168.1.255
的每个地址写入一个 http 请求来扫描我的网络。
备注:
- 我使用了
SyncHttpClient
,因为我需要扫描大量地址。我试过AsyncHttpClient
但没有收到响应。 - 我试过 (
InetAddress.isReachable()
) 方法来过滤地址,它不起作用,因为它总是 returnfalse
. 如果不向请求添加至少 1 个查询参数,我将无法创建 HttpRequest。
boolean found = false; void getIPAddress() { for (int i = 1; i < 255; i++) { if (!found) { String tryIP = subnet + String.valueOf(i); Log.d(TAG, "Trying: " + tryIP); final String finalIP = tryIP; try { SyncHttpClient client = new SyncHttpClient(); RequestParams params = new RequestParams(); params.put("check", "1"); client.get("http://" + finalIP , params, new JsonHttpResponseHandler() { @Override public void onSuccess(int statusCode, Header[] headers, JSONObject response) { try { JSONObject jo = response; String key = jo.getString("controller"); Log.d(TAG, "Success : " + response + " and key is : " + key); if (key.equals("esplight")) { Log.d(TAG, "Found the ESP! Its IP is :" + finalIP); found = true; } } catch (JSONException e) { e.printStackTrace(); } } @Override public void onFailure(int statusCode, Header[] headers, Throwable throwable, JSONObject errorResponse) { Log.d(TAG, "trying to connect failed "); } }); } catch (Exception e) { } } } }