//看看这个代码如何。
import javanetInetAddress;
import javanetUnknownHostException;
import javautilProperties;
import javautilSet;
public class TestSystemProperties {
public static void main(String [] args){
InetAddress netAddress = getInetAddress();
Systemoutprintln("host ip:" + getHostIp(netAddress));
Systemoutprintln("host name:" + getHostName(netAddress));
Properties properties = SystemgetProperties();
Set<String> set = propertiesstringPropertyNames(); //获取java虚拟机和系统的信息。
for(String name : set){
Systemoutprintln(name + ":" + propertiesgetProperty(name));
}
}
public static InetAddress getInetAddress(){
try{
return InetAddressgetLocalHost();
}catch(UnknownHostException e){
Systemoutprintln("unknown host!");
}
return null;
}
public static String getHostIp(InetAddress netAddress){
if(null == netAddress){
return null;
}
String ip = netAddressgetHostAddress(); //get the ip address
return ip;
}
public static String getHostName(InetAddress netAddress){
if(null == netAddress){
return null;
}
String name = netAddressgetHostName(); //get the host address
return name;
}
}
这个代码简单明了,就是调用现成的InetAddress类
已知ip地址,查主机名最简单的方法就是使用命令,以下是两种方法:
1、使用ping命令加上参数-a的方法反解析IP地址,可以得到主机名。例如:ping -a >
可以使用 InetAddressgetLocalHost(),代码如下:
import javanet;public class App {
public static void main(String[] args) throws UnknownHostException {
InetAddress local = InetAddressgetLocalHost();
Systemoutprintln("计算机名:" + localgetHostName());
Systemoutprintln("IP:" + localgetHostAddress());
}
}
域名系统(DNS)解析主机名的过程涉及多个步骤,可以简单地描述如下:
首先,客户端的 *** 作系统将发送一个DNS查询请求到本地DNS服务器。本地DNS服务器通常由Internet服务提供商(ISP)提供,也可以是企业的专用服务器。
如果本地DNS服务器具有所请求主机名的IP地址的缓存记录,则它将返回该记录给客户端,否则本地DNS服务器将自己向其他DNS服务器发出查询请求。
如果请求的主机名是顶级域名(例如com、net、org等)下的域名,则本地DNS服务器将询问根域名服务器,根域名服务器将返回顶级域名服务器的地址。
本地DNS服务器然后向顶级域名服务器发出查询请求,以获取下一级域名服务器的地址。例如,如果查询的主机名是examplecom,则本地DNS服务器将向com域名服务器发出查询请求。
com域名服务器将返回管理examplecom域的DNS服务器的地址。本地DNS服务器然后向examplecom域的DNS服务器发出查询请求。
如果examplecom域的DNS服务器有所请求的主机名的IP地址的记录,则它将返回该记录给本地DNS服务器。本地DNS服务器将在其缓存中存储该记录,以备将来使用,并将其返回给客户端。
如果examplecom域的DNS服务器没有所请求的记录,则它将继续向上级DNS服务器进行查询,直到找到包含所请求记录的服务器为止。
一旦找到所请求的IP地址,本地DNS服务器将返回该地址给客户端,并且客户端将使用该地址与所请求的主机建立连接。
总之,DNS解析主机名的过程需要经过多次查询和响应的交互,这些交互最终将主机名转换为其对应的IP地址。
获取主机名可以使用下面两种方法:
string
machineName
=
EnvironmentMachineName;
(System
命名空间下)
string
hostName
=
DnsGetHostName();
(SystemNet命名空间下)
获取IP地址,(可能需要IPv4
或
IPv6,
有时主机环境会存在多个ip地址)
DnsGetHostAddresses(hostName)可获得IPAddress[]
列表
或者
IPHostEntry
hostEntry=DnsGetHostEntry(hostName);
hostEntryAddressList[]
也可以获取IP
地址列表
接下来你可以使用自己的方法筛选获取想要的那个ip地址
比如IPv4
可以使用
hostEntryAddressList[i]AddressFamilyToString()
==
"InterNetwork"
作为判断条件;
IPv6可以使用hostEntryAddressList[i]AddressFamilyToString()
==
"InterNetworkV6"
或者使用
hostEntryAddressList[i]IsIPv6LinkLocal
来判断
示例代码网上也能搜的到。
以上就是关于java 怎么根据IP地址获取主机名全部的内容,包括:java 怎么根据IP地址获取主机名、如何通过netbios协议用IP查主机名、Java如何获取本地计算机的IP地址和主机名等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)