问题:如何“设置”java InetAddress.getCanonicalHostname()
方法报告的规范主机名?
上下文:我正在尝试在CentOS 5.6上运行Neo4j(它有一个嵌入式Jetty服务器)。该服务启动很好,但它绑定到错误的地址(IPv6),如netstat所示。我需要它绑定到:::*
(IPv4)。而不是0.0.0.0
。
我是否可以使用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 - 我可以很好地进入机器,所以有证据表明:::*
外地地址(原则上)很好。
[编辑 - 添加远程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)
答案 0 :(得分:3)
您可以通过以下网络属性告诉您的JVM使用IPv4而不是IPv6:-Djava.net.preferIPv4Stack=true
答案 1 :(得分:2)
也许设置-Djava.net.preferIPv4Stack=true
系统属性会有帮助吗?
答案 2 :(得分:1)
你必须告诉码头听特定的接口(ip),看看这里:http://www.paralint.com/blog/2007/05/18/making-jetty-listen-to-the-local-interface-only/
行:<Set name="Host"><SystemProperty name="jetty.host" default="localhost"/></Set>
那样做