日期:2014-05-18  浏览次数:20803 次

如何快速读取网络上mac地址!
现在有个项目是把一个网络视频播放器放在局域网中,然后获得其mac地址,并且打印出来,但是我们生产的网络上连接着大约200台PC,并且这个网络播放器的网卡也没有什么特殊的地方,有什么好的方法能够获得这个播放器的IP吗?
  后来就把电脑和播放器放在单独的网络中,通过遍历这个ip段的所有地址可以找到这个IP,并且通过IP获得对应的mac地址,但是问题就这里,因为这个单独的网络不在我们局域网里面,无法访问到我们数据库,但是客户要求打印mac地址同时,还要把mac以及对应的SN存入我们数据库!有什么好的解决方案?
  遍历局域网的代码如下:
 
C# code
 
       [DllImport("Iphlpapi.dll ")]
        private static extern int SendARP(Int32 dest, Int32 host, ref   Int64 mac, ref   Int32 length);
        [DllImport("Ws2_32.dll ")]
        private static extern Int32 inet_addr(string ip);

        private void button1_Click(object sender, EventArgs e)
        {
            Thread t=new Thread(new ThreadStart(EnumComputers));
            t.Start();
        }

        int i = 0;

        private void EnumComputers()
        {
            try
            {
                for (int i = 1; i <= 255; i++)
                {
                    Ping myPing;
                    myPing = new Ping();
                    myPing.PingCompleted += new PingCompletedEventHandler(_myPing_PingCompleted);

                    string pingIP = "169.254.5." + i.ToString();
                    myPing.SendAsync(pingIP, 1000, null);
                }
            }
            catch
            {

            }
        }

        private void _myPing_PingCompleted(object sender, PingCompletedEventArgs e)
        {

                if (e.Reply.Status == IPStatus.Success)
                {
                    ListItemAdds(e.Reply.Address.ToString() + "|  " + getRemoteMac(e.Reply.Address.ToString()) +"\r\n");
                    i++;

                }

        }

        public string getRemoteMac( string remoteIP)
        {
            Int32 ldest = inet_addr(remoteIP); //目的ip 
            try
            {
                Int64 macinfo = new Int64();
                Int32 len = 6;
                int res = SendARP(ldest, 0, ref macinfo, ref len);
                return Convert.ToString(macinfo, 16);
            }
            catch (Exception err)
            {
                Console.WriteLine("Error:{0}", err.Message);
            }
            return 0.ToString();
        }


        delegate void ListItemAdd(string s_Value);

        public void ListItemAdds(string s_Value)
        {
            if (listBox1.InvokeRequired)
            {
                this.Invoke(new ListItemAdd(ListItemAdds), new object[] { s_Value });
            }
            else
            {
                listBox1.Items.Add(s_Value);
            }
        }

    }


------解决方案--------------------
这与程序没啥关系,你只要配置播放器和PC的IP地址和你们数据库服务器的IP地址,在一个VLAN就行了,
------解决方案--------------------
这样他们就能互相访问了,写数据库就没有问题了。