怎样获得局域网内处于开机状态的计算机的用户名?

yangmyth01 2009-02-26 09:47:14
我想在某个时间,获得局域网内,没有关机的计算机的IP地址,和计算机的用户名
局域网IP不是固定ip而是通过DHCP服务自动获取的IP
麻烦大大们帮忙解决一下啊
...全文
920 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
yangmyth01 2009-02-27
  • 打赏
  • 举报
回复
我通过各种查询,得到的结果基本都是回帖里面给的方法,我们的局域网是通过DHCP服务获取的局域网IP
所有机器连接到一个路由上面的,不知道为啥获取到的确实相同的一个广域网IP,郁闷了
我再去查找一下其他的方法吧
结贴了
JaggerLee 2009-02-27
  • 打赏
  • 举报
回复
我前面写的那个遍历IP探测的代码段,你可以自己改写成多线程的,那样速度就绝对上来了
各个IP的探测是独立的,你维持100个线程的话,应该几轮就搞定了
JaggerLee 2009-02-27
  • 打赏
  • 举报
回复
汗.....
你们局域网的机子有独立的公网IP的啊?.....

那个方法是在本机的 dns 表里面去获取的各个电脑IP,如果你们之间的连接是通过广域网的,那么就是记录广域网IP了..

也许可以有其他办法来实现



而且后面的这个方法比前面的方法速度更慢,因为是用try 的异常控制实现的,速度比.NET的ping类实现更慢
但是后面的通过工作组来遍历局域网电脑的办法只能获取 pc 的 name ,也许可以通过调用windows API来达到更快的探测效率
yangmyth01 2009-02-27
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 JaggerLee 的回复:]
给你写了个获取IP的, 我前面那个传入的是IPAddress对象啊


C# code
using (DirectoryEntry root = new DirectoryEntry("WinNT:"))
{
//取工作组
foreach (DirectoryEntry domain in root.Children)
{
richTextBox1.AppendText("===" + domain.Name + "===\n");
//取工作组内的计算机

[/Quote]

对,你前面给的那个方法,我试过了,是正确的,但是对整个网段内的每个IP进行try,这样速度太慢了

你下面的这个方法,只有运行程序的计算机的IP是局域网的IP,其他的都是一样的广域网的那个IP
devilli 2009-02-26
  • 打赏
  • 举报
回复
用p2p
yangmyth01 2009-02-26
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 window_8888 的回复:]
icmp实现,控测主机存活.
[/Quote]

麻烦这个您有具体点的例子么,对这方面我还真是属于瞎子类的
yingmu 2009-02-26
  • 打赏
  • 举报
回复
mark
window_8888 2009-02-26
  • 打赏
  • 举报
回复
icmp实现,控测主机存活.
Roc_Lee 2009-02-26
  • 打赏
  • 举报
回复
学习了。够详细
birdlonger 2009-02-26
  • 打赏
  • 举报
回复
mark
homejiji 2009-02-26
  • 打赏
  • 举报
回复
mark
baiyunyinv 2009-02-26
  • 打赏
  • 举报
回复
class Program
{
static void Main(string[] args)
{
using (DirectoryEntry root = new DirectoryEntry("WinNT:"))
{
//取工作组
foreach (DirectoryEntry domain in root.Children)
{
Console.WriteLine("===" + domain.Name + "===\n");
//取工作组内的计算机
foreach (DirectoryEntry pc in domain.Children)
{
if (pc.Name != "Schema")
//将获取的计算机加入列表
{
Console.WriteLine(" ----> " + pc.Name + " UserName:" + pc.Username + "\n");
}
try
{
IPHostEntry host = System.Net.Dns.GetHostByName(pc.Name);
foreach (IPAddress ipadd in host.AddressList)
{
Console.WriteLine(" IP: " + ipadd.ToString() + "\n");
}
}
catch
{
Console.WriteLine(" 此主机尚未联入网络!:\n");
}
}
}
}
Console.ReadLine();

}

}
baiyunyinv 2009-02-26
  • 打赏
  • 举报
回复
class Program
{
static void Main(string[] args)
{
using (DirectoryEntry root = new DirectoryEntry("WinNT:"))
{
//取工作组
foreach (DirectoryEntry domain in root.Children)
{
Console.WriteLine("===" + domain.Name + "===\n");
//取工作组内的计算机
foreach (DirectoryEntry pc in domain.Children)
{
if (pc.Name != "Schema")
//将获取的计算机加入列表
{
Console.WriteLine(" ----> " + pc.Name + " UserName:" + pc.Username + "\n");
}
try
{
IPHostEntry host = System.Net.Dns.GetHostByName(pc.Name);
foreach (IPAddress ipadd in host.AddressList)
{
Console.WriteLine(" IP: " + ipadd.ToString() + "\n");
}
}
catch
{
Console.WriteLine(" 此主机尚未联入网络!:\n");
}
}
}
}
Console.ReadLine();

}

}
Dobzhansky 2009-02-26
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 Cherishny 的回复:]
using(DirectoryEntry  root=new  DirectoryEntry("WinNT:"))
{
//取工作组
foreach(DirectoryEntry  domain  in  root.Children)
{
lb_pcName.Items.Add("==="+domain.Name+"===");
//取工作组内的计算机
foreach(DirectoryEntry  pc  in  domain.Children)
{
if(pc.Name!="Schema")
//End  of  Schema
//将获取的计算机加入列表
lb_pcName.Items.Add("  "+pc.Name);
}
}

[/Quote]

此举甚好
JaggerLee 2009-02-26
  • 打赏
  • 举报
回复
给你写了个获取IP的, 我前面那个传入的是IPAddress对象啊


using (DirectoryEntry root = new DirectoryEntry("WinNT:"))
{
//取工作组
foreach (DirectoryEntry domain in root.Children)
{
richTextBox1.AppendText("===" + domain.Name + "===\n");
//取工作组内的计算机
foreach (DirectoryEntry pc in domain.Children)
{
if (pc.Name != "Schema")
//将获取的计算机加入列表
{
richTextBox1.AppendText(" ----> " + pc.Name + " UserName:" + pc.Username + "\n");
}
try
{
IPHostEntry host = System.Net.Dns.GetHostByName(pc.Name);
foreach (IPAddress ipadd in host.AddressList)
{
richTextBox1.AppendText(" IP: " + ipadd.ToString() + "\n");
}
}
catch
{
richTextBox1.AppendText(" 此主机尚未联入网络!:\n");
}
}
}
}
yangmyth01 2009-02-26
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 yangmyth01 的回复:]
引用 10 楼 JaggerLee 的回复:
忽然发现我的函数没写 return....我汗


return到是一个小问题,加上就可以了,但是你传入的参数的IP地址需要怎么写?2进制的IP地址?
[/Quote]

解决

顺便问一下8楼的兄弟,你的这个方法,能获取到PC的IP地址么?我没找到
yangmyth01 2009-02-26
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 JaggerLee 的回复:]
忽然发现我的函数没写 return....我汗
[/Quote]

return到是一个小问题,加上就可以了,但是你传入的参数的IP地址需要怎么写?2进制的IP地址?
SlaughtChen 2009-02-26
  • 打赏
  • 举报
回复
路过
yangmyth01 2009-02-26
  • 打赏
  • 举报
回复
Cherishny的方法已经能够实现我的功能了,我再调试一下
他的方法里面,能获得现在网内开机的计算机名,没有获取IP,我试试能不能把IP给加进去
完事之后就过来结贴
加载更多回复(5)

110,499

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧