我们正在尝试获取本地网络上所有机器的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设置来测试这个挑战,但我仍然有问题。
我期待听到您的回复。 谢谢大家。
答案 0 :(得分:0)
计算机名称可以是DNS或NETBIOS或其他名称。我建议您查看NMAP,看看它能做些什么。如果您想模仿它,您可以询问具体要求。例如,获取DNS名称意味着查询DNS服务器,计算机不会仅使用ICMP ping的名称进行回复。如果计算机安全设置允许,您可以执行netbios查询,或使用WMI,或者如果您在域中,则查询域服务器。
我不知道brightsign是什么,但是没有法律规定设备必须有DNS名称,有些设备只使用IP地址就可以了。此外,没有法律规定设备必须响应ping或任何其他协议。