0

我如何使用 ASP.NET 知道哪些机器与我的 PC 在同一个 LAN 上处于活动状态?

4

3 回答 3

2

您可以 ping 网络上的计算机。

// addressToPing can be an IPaddress or host name.
// returns a boolean indicating successful ping
public static bool PingComputer (string[] addressToPing)
{
    Ping pingSender = new Ping ();
    PingOptions options = new PingOptions ();

    // Use the default Ttl value which is 128,
    // but change the fragmentation behavior.
    options.DontFragment = true;

    // Create a buffer of 32 bytes of data to be transmitted.
    string data = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
    byte[] buffer = Encoding.ASCII.GetBytes (data);
    int timeout = 120;
    PingReply reply = pingSender.Send (args[0], timeout, buffer, options);
    return reply.Status == IPStatus.Success;
}   

http://msdn.microsoft.com/en-us/library/system.net.networkinformation.ping.aspx

您可以使用此 ping 代码并遍历 LAN ( for(i = 1; i < 255; i++)) 上的 IP 地址。不过,您可能应该阅读有关进行 IP 地址计算的内容:

http://blogs.msdn.com/knom/archive/2008/12/31/ip-address-calculations-with-c-subnetmasks-networks.aspx

这称为“ping 扫描”。它确实假定网络上的计算机尚未配置为忽略 ICMP 请求。

于 2009-01-15T17:20:55.070 回答
0

我将分两部分处理这个问题;一个 ASP.NET 页面和一个始终运行的服务。

始终运行的服务监控 ARP 请求,以了解哪些机器处于活动状态。为了查看 ARP 回复,它必须发出自己的 ARP 请求。在 Windows 网络上,总是有足够的空闲流量(用于浏览计算机)来很好地了解哪些计算机处于活动状态。

于 2009-01-15T17:35:36.943 回答
0

如果您有能力在网络上的各种计算机上安装监控软件,那么我很幸运地使用nagios来跟踪生产网络中哪些服务器启动/负载过重/磁盘空间不足/等。它还有一个不错的 Web 前端,您甚至根本不需要使用 ASP。

如果您必须使用 ASP 创建一些本地开发的东西,我会使用nmap扫描您的 C 类子网,然后在您的 ASP 页面中打印结果。这不是一个非常有效的方法,但它会非常简单并且几乎可以保证工作(使用适当的选项)。

于 2009-01-15T17:49:27.897 回答