除非交换机厂商预留这个功能接口给你,不然基本没指望的。
如果你的交换机够高级的话直接telnet到交换机上查看mac table,会有一些基本信息的,应该能满足你。

解决方案 »

  1.   

    我做的是一个局域网信息交流工具,代码很多,为了讨论需要,我只是摘取多线程扫描局域网IP部分和大家讨论!程序肯定不优化,希望大家别嘲笑在下!private void GetLanHost()
    {
    //获取局域网主机,并加入到 ComboBox1中
    //tempLocalIP = Dns.GetHostByName(LocalHostName).AddressList[0].ToString();
    //此处不直接使用“LocalHostIp”是因为,它在后面可能有变化!故而用tempLocalIP;
    strLanIpFront = tempLocalIP.Substring(0,tempLocalIP.LastIndexOf("."));//取出本地IP地址的前三段
    comboBox1.Text= "";
    comboBox1.Items.Clear();
    MyThread = new Thread[255];
    for(int i=0;i<255;i++)//启用255个线程扫描局域网主机IP,及机器名
    {
    MyThread[i] = new Thread(new ThreadStart(Scan));
    MyThread[i].Name = i.ToString();
    MyThread[i].Start();
    if(!MyThread[i].Join(120))
    {
    MyThread[i].Abort();
    }
    }
    }private void Scan()
    {
    //扫描LAN_IP的方法
    IPAddress LanIp = IPAddress.Parse(strLanIpFront + "." + Thread.CurrentThread.Name.ToString());
    IPHostEntry LanHostDns = null;
    //此处不直接使用“LocalHostIp”是因为,它在后面可能有变化!故而用tempLocalIP;
    if(LanIp.ToString() != tempLocalIP) //不扫描本机
    {
    try
    {
    LanHostDns = Dns.GetHostByAddress(LanIp);
    lock(comboBox1)
    {
    comboBox1.Items.Add("LAN:" + LanIp.ToString() + "(" + LanHostDns.HostName.ToString() + ")");
    }
    }
    catch
    {}
    }
    }
      

  2.   

    哪有这样扫描的,一般用arp扫描,一秒钟可以全扫描到
      

  3.   

    arp扫描?好啊!朋友,能给出示例代码吗?谢谢!
      

  4.   

    arp扫描?
    没听说过啊,算我不懂arp协议,说来听听...
      

  5.   

    交换机支持http方式查询的话干脆冒充浏览器直接去取这一页,然后分析得到的HTML
      

  6.   

    下面的做法参考一下。另外不需要255个线程,有一个线程扫描就可以了。255个线程光创建和调度就要消耗很多系统资源,可能是性能不高的一个原因哦! public class CLsArp
    {
    #region APIs
    [DllImport("iphlpapi.dll", CallingConvention = CallingConvention.Cdecl)]
    private static extern Int32 SendARP(UInt32 udwDestIP,UInt32 udwSrcIP,byte[] pMacAddr,ref Int32 PhyAddrLen); private const Int32 NUMBER_OF_PHYSICAL_ADDRESS_BYTES = 6;
    #endregion public CLsArp()
    {
    } public static byte[] GetComputerMacAddr(UInt32 dwIP)
    {
    byte[] abMacAddr = null; Int32 dwPhyAddrLen = 0;

    try
    {
    abMacAddr = new byte[NUMBER_OF_PHYSICAL_ADDRESS_BYTES];
    dwPhyAddrLen = abMacAddr.Length; if (SendARP(dwIP,0,abMacAddr, ref dwPhyAddrLen) != 0)
    {
    //Get Error!Reset byte array to null
    abMacAddr = null;
    }
    }
    catch
    {
    abMacAddr = null;
    } return abMacAddr;
    }
    }
      

  7.   

    不懂就在网上搜,这协议是公开的,又不是秘密,至于如何发送arp协议数据,建议你用winpcap的函数库,免费开原的,codeproject上有对winpcap的c#包装类库,很方便,对一个机子发送arp请求包,如果它开机并在网络上的话,会立即向你发送一个应答包,可以根据收到的应答包来搜索所有的机器,由于绝大部分防火墙没有拦截arp协议的功能,所以这个方法可以穿透防火墙,效果最好。
      

  8.   

    恩,谢谢zhouhongyun(最终幻想)朋友!另外,我注册了找个社区,好像就发了一个帖子,不能在发帖了,只能回帖,这是怎么的?