問題:如何設置Java的InetAddress.getCanonicalHostname()
方法報告的規範主機名?如何在linux中設置規範主機名?
上下文:我試圖在CentOS 5.6上運行Neo4j(它有一個嵌入式碼頭服務器)。該服務啓動得很好,但它與netstat證明的錯誤地址(IPv6)綁定。而不是:::*
,我需要它綁定到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的哪個接口? – 2011-06-02 17:13:17
我已經抓住了neo4j附帶的各種.properties文件 - 我還沒有找到可用於影響界面的設置。所以這是可能的,但我不知道如何去做。我在源代碼中找到一個名爲AddressResolver的類,它在查找對此類配置的引用時使用getCanonicalHostname()。 – jimbojw 2011-06-02 17:18:51
根據http://www.ipv6verify.com/,「::: *」首先不是有效的IPv6地址。等同於'0.0.0.0'的IPv6將是'::'。有沒有可能它不會綁定到一個地址? – JAB 2011-06-02 17:22:22