【发布时间】:2011-06-03 01:33:45
【问题描述】:
问题:如何“设置”java 的InetAddress.getCanonicalHostname() 方法报告的规范主机名?
上下文:我正在尝试在 CentOS 5.6 上运行 Neo4j(具有嵌入式码头服务器)。该服务启动得很好,但它绑定到了错误的地址 (IPv6),netstat 证明了这一点。而不是:::*,我需要它绑定到0.0.0.0(IPv4)。
是否有一个 JVM 参数可以用来强制 getCanoncialHostname() 返回我想要的字符串?如果没有,我可以在我的hosts 文件或其他 linux 配置文件中添加什么来实现相同的效果?
[编辑 - 添加 netstat 输出]
$ netstat -plten
...
Proto Local Address Foreign Address State User Inode PID/Program name
tcp 0.0.0.0:930 0.0.0.0:* LISTEN 0 10240 -
tcp 0.0.0.0:139 0.0.0.0:* LISTEN 0 57484 -
tcp 0.0.0.0:111 0.0.0.0:* LISTEN 0 10104 -
tcp 127.0.0.1:25 0.0.0.0:* LISTEN 0 12714 -
tcp 0.0.0.0:445 0.0.0.0:* LISTEN 0 57483 -
tcp :::7474 :::* LISTEN 500 524965 28200/java
tcp :::22 :::* LISTEN 0 62967 -
tcp :::1337 :::* LISTEN 500 524953 28200/java
tcp :::15003 :::* LISTEN 500 481149 3926/java
tcp :::60156 :::* LISTEN 500 524951 28200/java
tcp :::15004 :::* LISTEN 500 524917 28177/java
端口 22 是 ssh - 我可以 ssh 进入机器就好了,所以有证据表明 :::* 外部地址(原则上)很好。
[编辑 - 添加远程 nmap 输出]
从另一台主机运行 nmap,具体列出以上所有内容会产生以下结果:
$ nmap -T4 -A -v -PE -PS22,25,80 -PA21,23,80,930,139,111,25,445,7474,22,1337,15003,60156,15004,3389 192.168.176.138
...
Initiating SYN Stealth Scan at 13:31
Scanning 192.168.176.138 [1000 ports]
Discovered open port 111/tcp on 192.168.176.138
Discovered open port 139/tcp on 192.168.176.138
Discovered open port 445/tcp on 192.168.176.138
Discovered open port 22/tcp on 192.168.176.138
Discovered open port 15003/tcp on 192.168.176.138
Discovered open port 15004/tcp on 192.168.176.138
Completed SYN Stealth Scan at 13:31, 0.04s elapsed (1000 total ports)
【问题讨论】:
-
你不能告诉neo4j绑定到哪个接口吗?
-
我已经浏览了 neo4j 附带的各种 .properties 文件 - 我还没有找到可以用来影响界面的设置。所以这是可能的,但我不知道该怎么做。我在源代码中发现了一个名为 AddressResolver 的类,它使用 getCanonicalHostname() 来查找对此类配置的引用。
-
根据ipv6verify.com,
:::*首先不是一个有效的 IPv6 地址。与0.0.0.0等效的 IPv6 将改为::。它可能根本没有绑定到地址吗? -
@JAB:
:::*表示“::上的所有端口”,就像0.0.0.0:*表示0.0.0.0上的所有端口一样。 -
@Thomas:是的,一旦 jimbojw 发布了 netstat 输出,我就明白了。我的困惑主要是由于他使用
:::*vs.0.0.0.0而不是:::*vs.0.0.0.0:*或::vs.0.0.0.0。