- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
操作系统:Red Hat Enterprise Linux Server 6.6 版(圣地亚哥)
Java jdk1.8.0_45
在 tomcat 中运行的独立程序和代码为少数主机名返回错误的 IP 地址。同一台机器上的 dig 和 nslookup 返回正确的 IP。使用 strace -s 2048 -o strace_log -ff
没有产生任何有用的故障排除信息。使用 -Dsun.net.spi.nameservice.nameservers=8.8.8.8
或本地 DNS 服务器(由 nslookup 和 dig 使用)返回相同的错误地址。
[INFO] sun.net.InetAddressCachePolicy.get() = 30
[INFO] sun.net.spi.nameservice.provider.1 = null
[INFO] sun.net.spi.nameservice.nameservers = 8.8.8.8
使用 dnsjava使用 -Dsun.net.spi.nameservice.provider.1="dns,dnsjava"
返回正确的 IP 地址。
如何检查 java 实际使用的名称服务器?或者任何其他故障排除技术?
谢谢
测试.sh
#!/bin/sh
HOST=REMOVED
NAMESERVER=LOCAL_NAME_SERVER_IP
NAMESERVER=8.8.8.8
# -Djava.net.preferIPv4Stack=true \ #-Dsun.net.spi.nameservice.nameservers=$NAMESERVER \
# -javaagent:dnslog.jar \
# -Dsun.net.spi.nameservice.provider.1="dns,dnsjava" \
# -cp ".:./dnsjava-2.1.8.jar" \
javac Test.java
rm strace_log.*
strace -s 2048 -o strace_log -ff java \
-Djava.net.preferIPv4Stack=true \
-Dsun.net.spi.nameservice.nameservers=$NAMESERVER \
Test https://$HOST
dig $HOST > ${HOST}_dig.txt
nslookup $HOST > ${HOST}_nslookup.txt
java -cp "./dnsjava-2.1.8.jar" dig $HOST > ${HOST}_dnsjava.txt
测试.java
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.*;
import java.util.logging.*;
public class Test extends Formatter {
public static void main(String[] args) throws Exception {
Logger log = Logger.getLogger(Test.class.getName());
log.setUseParentHandlers(false);
ConsoleHandler handler = new ConsoleHandler();
handler.setFormatter(new Test());
log.addHandler(handler);
log.info("sun.net.InetAddressCachePolicy.get() = " + sun.net.InetAddressCachePolicy.get());
log.info("sun.net.spi.nameservice.provider.1 = " + System.getProperty("sun.net.spi.nameservice.provider.1"));
log.info("sun.net.spi.nameservice.nameservers = " + System.getProperty("sun.net.spi.nameservice.nameservers"));
try {
if (args.length != 1 && args.length != 2) {
log.warning("Usage: java Test <https://address.server.edu> [timeout]");
return;
}
log.info("Received host address " + args[0]);
URL constructedUrl = new URL(args[0]);
String host = constructedUrl.getHost();
InetAddress address = InetAddress.getByName(host);
String ip = address.getHostAddress();
log.info("Host = " + args[0] + " IP = " + ip);
InetAddress Address = InetAddress.getLocalHost();
log.info("InetAddress.getLocalHost() = " + Address);
log.info("InetAddress.getCanonicalHostName() = " + Address.getCanonicalHostName());
InetAddress SW[] = InetAddress.getAllByName(host);
for (int i=0; i < SW.length; i++) {
log.info("getAllByName[" + i + "] = " + SW[i]);
}
URLConnection conn = constructedUrl.openConnection();
if (args.length == 2) {
conn.setConnectTimeout(Integer.valueOf(args[1]) * 1000);
} else {
conn.setConnectTimeout(5000);
}
log.info("Setting connection timeout to " + conn.getConnectTimeout() / 1000 + " second(s).");
log.info("Trying to connect to " + args[0]);
InputStreamReader reader = new InputStreamReader(conn.getInputStream(), "UTF-8");
BufferedReader in = new BufferedReader(reader);
in.readLine();
in.close();
reader.close();
log.info("Great! It worked.");
} catch (Exception e) {
log.info("Could not connect to the host address " + args[0]);
log.info("The error is: " + e.getMessage());
log.info("Here are the details:");
log.log(Level.SEVERE, e.getMessage(), e);
throw new RuntimeException(e);
}
}
public String format(LogRecord record) {
StringBuffer sb = new StringBuffer();
sb.append("[");
sb.append(record.getLevel().getName());
sb.append("]\t");
sb.append(formatMessage(record));
sb.append("\n");
return sb.toString();
}
}
最佳答案
问题已通过重新启动 nscd 守护程序解决。它有点挂起,因为有许多 nscd -i hosts
正在处理运行,但它仍在响应来自应用程序的查询。这可能解释了为什么 DNS TTL 不被接受。
关于java - 错误的 IP 地址返回给在 tomcat 中运行的 Java 程序和代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44618865/
我刚刚用 java-swing 为我写了一个桌面时钟,我希望每次登录时该时钟都运行。 为此,我将我的 jar 文件添加到 start 文件夹,我让时钟开始运行。 但我的问题是 - 任务栏中显示的图标允
我正在尝试编写一个程序来检查用户是否上传了新视频。我想让它成为一项后端工作,不断检查用户最近的视频,然后使用我的应用程序向我的用户发送推送。有关于这个问题的任何文档或示例代码吗?我完全不知道从哪里开始
我正在为我的 Raspberry Pi 编写一个程序,该程序由两个主要部分组成: 使用 Spotify-API“Libspotify”搜索音乐并播放音乐的 C 程序。 一个在 apache2 We
我做了一个C++生成命令行并将命令转发给它的程序。目前,我正在将 cmd 控制台的输出发送到一个文件,并在我的 C++ 程序中读取它。但我想让它与管道一起工作。 是否可以从 Windows cmd 行
是否可以使用 C 程序和 malloc 找出处理器的页面大小?而不是使用 sysconf() 调用? 最佳答案 如果你可以#include一些linux内核头文件,你可以在中找到宏PAGE_SIZE
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 8 年前。 Improve this ques
我想实现一个算法: 从 Ruby on Rails 应用程序获取数据库对象作为输入, 对输入执行计算, 根据计算查询 Rails 数据库, 并根据查询生成一组有序结果。 我将用 C(也许是 Objec
我今天的任务是创建一个 Python 脚本(例如 A.py),它可以执行以下操作: 启动 C 程序(例如 CProg)并传递一些参数 启动另一个 Python 脚本(例如 B.py)并传递其他参数 加
我有一个在后台运行的 .NET 程序,需要创建一个可以与该程序通信的 Windows Shell 扩展。起初我以为我会在 .NET 中创建我的 Shell Extension,并使用 IpcServe
Python 程序做前端工作,C 程序做后端工作。它们中的每一个都是一个单独的过程。 Python 进程充当主进程,向 C 进程发送信号和事件。 C 进程生成统计信息、计数器和信息,这些信息被发送回
如何与 shell 脚本共享 C 头文件? shell 脚本通过命名管道与 C 程序通信。让我们假设 C 头文件中定义的枚举 SAMPLE_ONE 由 C 程序写入管道。 shell 脚本从管道中读出
我有一些客户/候选人提示我的程序不能在他们的 Windows 7 64 位版本上运行(已通过屏幕截图确认)。错误很奇怪,例如: in the trial version i am getting a
这个问题在这里已经有了答案: Why SDL defines main macro? (2 个答案) 关闭 7 年前。 我在 Windows 操作系统下使用 QT Creator 的简单程序中使用
我的导师给了我们一个基本的 C shell 来扩展,我目前正在努力让 shell 在用户在命令行中输入“cd [directory]”时更改目录。我已经得到它来停止段错误,但它不会更改目录。谁能告诉我
我以前有过这个工作,但我使用的是指针。 getenv() 不断崩溃,所以我使用 sprintf() 复制了结果。现在我想用 : 删除并只打印第一次出现的地方。请帮忙! #include #inclu
你好,我第一次使用 C primer plus book 学习 C,然后在第 16 章关于 C11 标准的 _Generic 我在 Eclipse c/c++ 中编写了一个程序并构建它产生了 8 个错
我正在尝试从另一个 C 程序执行 python 程序,其中 py 脚本的返回值为 int array[3] 我可以从 python 退出代码中获取这个数组吗?? 编辑:如果问题不清楚,我可以将 pyt
// The countChicken() method should count the number of occurrences of the word chicken (or some oth
我已经通过 ZMQ 使用同一类成功地从 C# 和 C++ 程序传输数据,其中 C++ 类是数据定义,编译器幸运地将字节数组屏蔽到类。 我如何在 C# 和 Node.js 程序之间做同样的事情?我认为他
任何人都可以为我指明有关 makefile 如何工作以及如何使用 eclipse 从头开始基本程序的好教程的方向吗?我正在为 fedora 和 C++ 使用 eclipse 3.4.1 版。提前致
我是一名优秀的程序员,十分优秀!