gpt4 book ai didi

java - 如何找出我局域网中主机的 IPv6 地址(按名称)

转载 作者:行者123 更新时间:2023-11-29 09:18:30 26 4
gpt4 key购买 nike

我有两台计算机连接在我知道支持 IPv6 的网络的同一个路由器上。我们称它们为“PC-A”和“PC-B”

我希望“PC-A”找出“PC-B”的 IPv6 地址,反之亦然

我做的第一件事是

setSystem.setProperty("java.net.preferIPv6Addresses", "true");

如果我再说

InetAddress IPAddress = InetAddress.getLocalHost();

我可以获得自己的 IpV6 格式的地址

但是,以下两个语句都没有给我“PC-B”的 IPv6 地址:

Inet6Address IPAddress6 = (Inet6Address)InetAddress.getByName("PC-B");
InetAddress IPAddress = InetAddress.getByName("PC-B");

我也试过导入

import com.lavantech.net.dns.SimpleDNSLookup;
import com.lavantech.net.dns.DNSLookup

我用的第一个:

SimpleDNSLookup d = new SimpleDNSLookup();
System.out.println(d.getInet6Address("PC-B"));

第二个是:

DNSLookup dnsLookup = new DNSLookup("PC-B", DNSLookup.QTYPE_AAAA, DNSLookup.QCLASS_IN, 3000, null);
// Get all Address Records.
ResourceRecord[] ansRecords = dnsLookup.getAAAARecords();
System.out.println(ansRecords[0]);

这些都不起作用。

我也试过用下面的

import org.xbill.DNS.*;

int type = Type.AAAA;
Name name = Name.fromString("PC-B");
Lookup lookup = new Lookup(name, type);
lookup.run();
int result = lookup.getResult();
Record[] answers = lookup.getAnswers();
System.out.println(answers[0]);
// (where, for brevity, i am skipping the parts where I check whether result == Lookup.SUCCESSFUL
  • 请注意,如果我用“PC-B”代替“ipv6.google.com”,我会得到所有想要的结果!
  • 另请注意,如果我在上述方法中适用的地方仅使用 InetAddress 和 Type_A,我的程序将毫无问题地返回“PC-B”的 IPv4 地址。

我错过了什么?非常感谢任何帮助!

最佳答案

您的问题 - 不幸的是 - 一个尚未解决的网络问题,处理本地子网上的主机发现(无论该子网是否有路由器)。

您想要的输出显然是一个 IPv6 地址,但不清楚您的输入到底是什么。

让我们关注 PC-B。你究竟如何识别PC-B?很明显,您将其称为“PC-B”,但在您的 PC 知道这是它的名称之前,应该在某处配置该名称。具体配置在哪里?这是您在 PC-B 本身上设置的主机名,还是您提供该名称的域名服务器 (DNS)?如果是 DNS 系统中的名称,确实可以查询 DNS 系统的 AAAA 记录来获取 IPv6 地址,但需要完全限定的域名 (FQDN)。例如。 “PC-B.yourdomain.com”而不仅仅是“PC-B”。

如果知道 PC-B 的 MAC 地址,则可以使用邻居发现协议(protocol) (NDP) 找出 PC-B 的 IP 地址。

一旦您在本地机器上配置了它们,网络协议(protocol)就允许 PC-A 和 PC-B 自己宣布它们的名字。此类协议(protocol)称为“服务发现”协议(protocol),您在这里的选择是 (1) 多播 DNS (mDNS) 和可能的 DNS 服务发现 (DNS-SD);或者 (2) 另一方面,UPnP 中的简单服务发现协议(protocol) (SSDP)。优点是一些操作系统已经实现了这一点。例如。如果 PC-B 是 Mac OS X 主机,您需要做的就是在 DNS 中查询“pc-b.local”以获得答案。不幸的是,虽然存在针对 Linux (Avahi) 和 Windows (Bonjour) 的 mDNS 实现,但默认情况下并未安装它们。第三种选择是编写您自己的主机发现协议(protocol),并让您的主机运行该协议(protocol)。

考虑因素是您希望支持哪些平台,是否可以安装第三方软件,发现是否需要安全(上述选项不是,如果这是一个问题,请查看 Secure Neighbor Discovery -SEND-) ,以及您首先输入的内容(主机名“PC-B”,或在 PC-B 上运行的服务类型,例如 _http._tcp 用于网络服务器)。

关于java - 如何找出我局域网中主机的 IPv6 地址(按名称),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8005691/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com