如何在linux中设置规范主机名?

时间:2011-06-02 17:10:49

标签: java linux hostname neo4j

问题:如何“设置”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)

3 个答案:

答案 0 :(得分:3)

您可以通过以下网络属性告诉您的JVM使用IPv4而不是IPv6:-Djava.net.preferIPv4Stack=true

请参阅Networking properties

答案 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> 那样做