无法在本地网络上找到所有机器名称

Can't find all machine name on local network

我们正在尝试获取本地网络上机器的所有 IP 地址和主机名,我们有一个连接到本地网络的显示框(BrightSign 框),我们希望获得有关该框的所有信息。我们可以找到它的 ip 地址,但无法获取主机名。所以我们无法确定哪个 ip 地址分配给了那个盒子。 (我们可以通过盒子自带的程序获知盒子的ip地址;但是我们要自动检测)

这里是我们在c#中使用的代码 `

    public void scan(string subnet)
    {
        Ping myping;
        PingReply reply;
        IPAddress addr;
        IPHostEntry host;


        for (int i = 1; i < 255; i++)
        {
            string subnetn = "." + i.ToString();
            myping = new Ping();
            //string data = "aa";
            //byte[] buffer = Encoding.ASCII.GetBytes(data);
            //PingOptions optionss = new PingOptions(64, true);
            int timeout = 1000;
            reply = myping.Send(subnet + subnetn);

            if (reply.Status == IPStatus.Success)
            {
                try {
                    addr = IPAddress.Parse(subnet+subnetn);
                    host = Dns.GetHostEntry(addr);
                    txtHosts.AppendText(subnet + subnetn + host.HostName.ToString()+"\n");                           
                }
                catch { 

                }
            }
        }

    }`

如果我们使用此代码,系统可以检测到所有 ip 但不是主机名属于电话和我提到的盒子。 简而言之,我们需要拥有本地网络上的所有机器名称和 IP 地址。 那么,你们知道问题是什么吗?我们可以做些什么来解决这个问题。我们做了一些研究并尝试了一些方法。我们尝试发送 ping 我们不能获取主机名的 ip 地址,我们意识到如果机器的 ttl 设置为 64,我们不能获取主机名,但如果它的 ttl 是 128,我们可以设法学习主机名,我也调整了 ping 设置来测试这个挑战,但我仍然有问题。

期待您的回复。 谢谢大家

机器名可以是 DNS 或 NETBIOS 或其他名称。我建议您查看 NMAP,看看它能做什么。如果您想效仿,可以询问具体要求。例如,获取 DNS 名称意味着查询 DNS 服务器,计算机不会仅使用来自 ICMP ping 的名称来回复。如果计算机安全设置允许,您可以进行 netbios 查询,或使用 WMI,或者如果您在域中,则查询域服务器。

我不知道 brightsign 是什么,但没有法律规定设备必须有 DNS 名称,有些设备只使用 IP 地址,仅此而已。也没有法律规定设备必须响应 ping 或任何其他协议。