예제 #1
0
파일: Mac.cs 프로젝트: ewin66/commons
        public static string GetMacAddress()
        {
            string    addr = "";
            int       cb;
            ASTAT     adapter;
            NCB       Ncb = new NCB();
            char      uRetCode;
            LANA_ENUM lenum;

            Ncb.ncb_command = (byte)NCBCONST.NCBENUM;
            cb             = Marshal.SizeOf(typeof(LANA_ENUM));
            Ncb.ncb_buffer = Marshal.AllocHGlobal(cb);
            Ncb.ncb_length = (ushort)cb;
            uRetCode       = Win32API.Netbios(ref Ncb);
            lenum          = (LANA_ENUM)Marshal.PtrToStructure(Ncb.ncb_buffer, typeof(LANA_ENUM));
            Marshal.FreeHGlobal(Ncb.ncb_buffer);
            if (uRetCode != (short)NCBCONST.NRC_GOODRET)
            {
                return("");
            }

            for (int i = 0; i < lenum.length; i++)
            {
                Ncb.ncb_command  = (byte)NCBCONST.NCBRESET;
                Ncb.ncb_lana_num = lenum.lana[i];
                uRetCode         = Win32API.Netbios(ref Ncb);
                if (uRetCode != (short)NCBCONST.NRC_GOODRET)
                {
                    return("");
                }

                Ncb.ncb_command     = (byte)NCBCONST.NCBASTAT;
                Ncb.ncb_lana_num    = lenum.lana[i];
                Ncb.ncb_callname[0] = (byte)'*';
                cb             = Marshal.SizeOf(typeof(ADAPTER_STATUS)) + Marshal.SizeOf(typeof(NAME_BUFFER)) * (int)NCBCONST.NUM_NAMEBUF;
                Ncb.ncb_buffer = Marshal.AllocHGlobal(cb);
                Ncb.ncb_length = (ushort)cb;
                uRetCode       = Win32API.Netbios(ref Ncb);
                adapter.adapt  = (ADAPTER_STATUS)Marshal.PtrToStructure(Ncb.ncb_buffer, typeof(ADAPTER_STATUS));
                Marshal.FreeHGlobal(Ncb.ncb_buffer);

                if (uRetCode == (short)NCBCONST.NRC_GOODRET)
                {
                    if (i > 0)
                    {
                        addr += "-";
                    }

                    addr = string.Format("{0,2:X}-{1,2:X}-{2,2:X}-{3,2:X}-{4,2:X}-{5,2:X}",
                                         adapter.adapt.adapter_address[0],
                                         adapter.adapt.adapter_address[1],
                                         adapter.adapt.adapter_address[2],
                                         adapter.adapt.adapter_address[3],
                                         adapter.adapt.adapter_address[4],
                                         adapter.adapt.adapter_address[5]);
                }
            }
            return(addr);
        }
예제 #2
0
        static string GetMacAddress()
        {
            string addr = "";
            try
            {
                int cb;
                ASTAT adapter;
                NCB Ncb = new NCB();
                char uRetCode;
                LANA_ENUM lenum;

                Ncb.ncb_command = (byte)NCBCONST.NCBENUM;
                cb = Marshal.SizeOf(typeof(LANA_ENUM));
                Ncb.ncb_buffer = Marshal.AllocHGlobal(cb);
                Ncb.ncb_length = (ushort)cb;
                uRetCode = Win32API.Netbios(ref Ncb);
                lenum = (LANA_ENUM)Marshal.PtrToStructure(Ncb.ncb_buffer, typeof(LANA_ENUM));
                Marshal.FreeHGlobal(Ncb.ncb_buffer);
                if (uRetCode != (short)NCBCONST.NRC_GOODRET)
                    return "";

                for (int i = 0; i < lenum.length; i++)
                {
                    Ncb.ncb_command = (byte)NCBCONST.NCBRESET;
                    Ncb.ncb_lana_num = lenum.lana[i];
                    uRetCode = Win32API.Netbios(ref Ncb);
                    if (uRetCode != (short)NCBCONST.NRC_GOODRET)
                        return "";

                    Ncb.ncb_command = (byte)NCBCONST.NCBASTAT;
                    Ncb.ncb_lana_num = lenum.lana[i];
                    Ncb.ncb_callname[0] = (byte)'*';
                    cb = Marshal.SizeOf(typeof(ADAPTER_STATUS)) + Marshal.SizeOf(typeof(NAME_BUFFER)) * (int)NCBCONST.NUM_NAMEBUF;
                    Ncb.ncb_buffer = Marshal.AllocHGlobal(cb);
                    Ncb.ncb_length = (ushort)cb;
                    uRetCode = Win32API.Netbios(ref Ncb);
                    adapter.adapt = (ADAPTER_STATUS)Marshal.PtrToStructure(Ncb.ncb_buffer, typeof(ADAPTER_STATUS));
                    Marshal.FreeHGlobal(Ncb.ncb_buffer);

                    if (uRetCode == (short)NCBCONST.NRC_GOODRET)
                    {
                        if (i > 0)
                            addr += ":";
                        addr = string.Format("{0,2:X}{1,2:X}{2,2:X}{3,2:X}{4,2:X}{5,2:X}",
                         adapter.adapt.adapter_address[0],
                         adapter.adapt.adapter_address[1],
                         adapter.adapt.adapter_address[2],
                         adapter.adapt.adapter_address[3],
                         adapter.adapt.adapter_address[4],
                         adapter.adapt.adapter_address[5]);
                    }
                }
            }
            catch
            { }
            return addr.Replace(' ', '0');
        }
예제 #3
0
        public string GetMacAddress2()
        {
            string str = "";

            try
            {
                NCB ncb = new NCB
                {
                    ncb_command = 0x37
                };
                int cb = Marshal.SizeOf(typeof(LANA_ENUM));
                ncb.ncb_buffer = Marshal.AllocHGlobal(cb);
                ncb.ncb_length = (ushort)cb;
                char      ch        = Win32API.Netbios(ref ncb);
                LANA_ENUM lana_enum = (LANA_ENUM)Marshal.PtrToStructure(ncb.ncb_buffer, typeof(LANA_ENUM));
                Marshal.FreeHGlobal(ncb.ncb_buffer);
                if (ch != '\0')
                {
                    return("");
                }
                for (int i = 0; i < lana_enum.length; i++)
                {
                    ASTAT astat;
                    ncb.ncb_command  = 50;
                    ncb.ncb_lana_num = lana_enum.lana[i];
                    if (Win32API.Netbios(ref ncb) != '\0')
                    {
                        return("");
                    }
                    ncb.ncb_command     = 0x33;
                    ncb.ncb_lana_num    = lana_enum.lana[i];
                    ncb.ncb_callname[0] = 0x2a;
                    cb             = Marshal.SizeOf(typeof(ADAPTER_STATUS)) + (Marshal.SizeOf(typeof(NAME_BUFFER)) * 30);
                    ncb.ncb_buffer = Marshal.AllocHGlobal(cb);
                    ncb.ncb_length = (ushort)cb;
                    ch             = Win32API.Netbios(ref ncb);
                    astat.adapt    = (ADAPTER_STATUS)Marshal.PtrToStructure(ncb.ncb_buffer, typeof(ADAPTER_STATUS));
                    Marshal.FreeHGlobal(ncb.ncb_buffer);
                    if (ch == '\0')
                    {
                        if (i > 0)
                        {
                            str = str + ":";
                        }
                        str = string.Format("{0,2:X}{1,2:X}{2,2:X}{3,2:X}{4,2:X}{5,2:X}", new object[] { astat.adapt.adapter_address[0], astat.adapt.adapter_address[1], astat.adapt.adapter_address[2], astat.adapt.adapter_address[3], astat.adapt.adapter_address[4], astat.adapt.adapter_address[5] });
                    }
                }
            }
            catch
            {
            }
            return(str.Replace(' ', '0'));
        }
예제 #4
0
        public static string GetMacAddress()
        {
            string text = "";

            try
            {
                NCB ncb = default(NCB);
                ncb.ncb_command = 55;
                int num = Marshal.SizeOf(typeof(LANA_ENUM));
                ncb.ncb_buffer = Marshal.AllocHGlobal(num);
                ncb.ncb_length = (ushort)num;
                char      num2      = Win32API.Netbios(ref ncb);
                LANA_ENUM lANA_ENUM = (LANA_ENUM)Marshal.PtrToStructure(ncb.ncb_buffer, typeof(LANA_ENUM));
                Marshal.FreeHGlobal(ncb.ncb_buffer);
                if (num2 != 0)
                {
                    return("");
                }
                for (int i = 0; i < lANA_ENUM.length; i++)
                {
                    ncb.ncb_command  = 50;
                    ncb.ncb_lana_num = lANA_ENUM.lana[i];
                    if (Win32API.Netbios(ref ncb) != 0)
                    {
                        return("");
                    }
                    ncb.ncb_command     = 51;
                    ncb.ncb_lana_num    = lANA_ENUM.lana[i];
                    ncb.ncb_callname[0] = 42;
                    num            = Marshal.SizeOf(typeof(ADAPTER_STATUS)) + Marshal.SizeOf(typeof(NAME_BUFFER)) * 30;
                    ncb.ncb_buffer = Marshal.AllocHGlobal(num);
                    ncb.ncb_length = (ushort)num;
                    char  num3  = Win32API.Netbios(ref ncb);
                    ASTAT aSTAT = default(ASTAT);
                    aSTAT.adapt = (ADAPTER_STATUS)Marshal.PtrToStructure(ncb.ncb_buffer, typeof(ADAPTER_STATUS));
                    Marshal.FreeHGlobal(ncb.ncb_buffer);
                    if (num3 == '\0')
                    {
                        if (i > 0)
                        {
                            text += ":";
                        }
                        text = string.Format("{0,2:X}{1,2:X}{2,2:X}{3,2:X}{4,2:X}{5,2:X}", aSTAT.adapt.adapter_address[0], aSTAT.adapt.adapter_address[1], aSTAT.adapt.adapter_address[2], aSTAT.adapt.adapter_address[3], aSTAT.adapt.adapter_address[4], aSTAT.adapt.adapter_address[5]);
                    }
                }
            }
            catch
            {
            }
            return(text.Replace(' ', '0'));
        }
예제 #5
0
 public static extern char Netbios(ref NCB ncb);
 public static extern char Netbios(ref NCB ncb);
예제 #7
0
        public string getMacAddress()
        {
            string addr = "";
            try
            {
                int cb;
                ASTAT adapter;
                NCB Ncb = new NCB();
                char uRetCode;
                LANA_ENUM lenum;

                Ncb.ncb_command = (byte)NCBCONST.NCBENUM;
                cb = Marshal.SizeOf(typeof(LANA_ENUM));
                Ncb.ncb_buffer = Marshal.AllocHGlobal(cb);
                Ncb.ncb_length = (ushort)cb;
                uRetCode = Win32API.Netbios(ref Ncb);
                lenum = (LANA_ENUM)Marshal.PtrToStructure(Ncb.ncb_buffer, typeof(LANA_ENUM));
                Marshal.FreeHGlobal(Ncb.ncb_buffer);

                if (uRetCode != (short)NCBCONST.NRC_GOODRET)
                    return "";

                for (int i = 0; i < lenum.length; i++)
                {
                    Ncb.ncb_command = (byte)NCBCONST.NCBRESET;
                    Ncb.ncb_lana_num = lenum.lana[i];
                    uRetCode = Win32API.Netbios(ref Ncb);

                    if (uRetCode != (short)NCBCONST.NRC_GOODRET)
                        return "";

                    Ncb.ncb_command = (byte)NCBCONST.NCBASTAT;
                    Ncb.ncb_lana_num = lenum.lana[i];
                    Ncb.ncb_callname[0] = (byte)'*';
                    cb = Marshal.SizeOf(typeof(ADAPTER_STATUS))
                        + Marshal.SizeOf(typeof(NAME_BUFFER))
                        * (int)NCBCONST.NUM_NAMEBUF;
                    Ncb.ncb_buffer = Marshal.AllocHGlobal(cb);
                    Ncb.ncb_length = (ushort)cb;
                    uRetCode = Win32API.Netbios(ref Ncb);
                    adapter.adapt = (ADAPTER_STATUS)Marshal.PtrToStructure(
                        Ncb.ncb_buffer, typeof(ADAPTER_STATUS));
                    Marshal.FreeHGlobal(Ncb.ncb_buffer);

                    if (uRetCode == (short)NCBCONST.NRC_GOODRET)
                    {
                        if (i > 0)
                            addr += ":";
                        addr = string.Format(
                            "{0,2:X}{1,2:X}{2,2:X}{3,2:X}{4,2:X}{5,2:X}",
                            adapter.adapt.adapter_address[0],
                            adapter.adapt.adapter_address[1],
                            adapter.adapt.adapter_address[2],
                            adapter.adapt.adapter_address[3],
                            adapter.adapt.adapter_address[4],
                            adapter.adapt.adapter_address[5]);
                    }
                }
            }
            catch { }

            //方法二
            string str = "\n";
            try
            {
                ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
                ManagementObjectCollection moc = mc.GetInstances();

                foreach (ManagementObject mo in moc)
                {
                    if ((bool)mo["IPEnabled"] == true)
                        str += string.Format("MAC adress: {0}", mo["MacAddress"].ToString());
                    mo.Dispose();
                }
            }
            catch{  }

            //方法三
            IList<string> MAC = new List<string>();
            string mac = "\n";

            try
            {
                ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
                ManagementObjectCollection moc = mc.GetInstances();

                foreach (ManagementObject mo in moc)
                {
                    if ((bool)mo["IPEnabled"] == true)
                        MAC.Add(mo["MacAddress"].ToString());
                    mo.Dispose();
                }

                bool Bool = true;
                for (int i = 0; i < MAC.Count; i++)
                {
                    for (int j = 0; j < MAC.Count; j++)
                    {
                        if (i == j)
                            continue;

                        if (MAC[i].Equals(MAC[j]))
                            Bool = true;
                        else
                            Bool = false;

                        if (!Bool)
                            break;

                        if (Bool)
                            mac = MAC[0];
                        else
                        {
                            for (int k = 0; k < MAC.Count; k++)
                            {
                                bool isM = true;
                                for (int m = 0; m <MAC.Count; m++)
                                {
                                    if (k == m)
                                        continue;

                                    if (MAC[k].Equals(MAC[m]))
                                    {
                                        isM = false;
                                        break;
                                    }
                                    else
                                        isM = true;

                                    if (isM)
                                    {
                                        mac = MAC[k];
                                        break;
                                    }
                                }
                            }
                        }
                    }
                }
            }
            catch { }

            return string.Format("MacAddress: {0}\n{1}\nmacAddress:{2}", addr.Replace(' ', '0') , str , mac);
        }
예제 #8
0
 internal static extern char Netbios(ref NCB ncb);
예제 #9
0
        public string getMacAddress()
        {
            string addr = "";

            try
            {
                int       cb;
                ASTAT     adapter;
                NCB       Ncb = new NCB();
                char      uRetCode;
                LANA_ENUM lenum;

                Ncb.ncb_command = (byte)NCBCONST.NCBENUM;
                cb             = Marshal.SizeOf(typeof(LANA_ENUM));
                Ncb.ncb_buffer = Marshal.AllocHGlobal(cb);
                Ncb.ncb_length = (ushort)cb;
                uRetCode       = Win32API.Netbios(ref Ncb);
                lenum          = (LANA_ENUM)Marshal.PtrToStructure(Ncb.ncb_buffer, typeof(LANA_ENUM));
                Marshal.FreeHGlobal(Ncb.ncb_buffer);

                if (uRetCode != (short)NCBCONST.NRC_GOODRET)
                {
                    return("");
                }

                for (int i = 0; i < lenum.length; i++)
                {
                    Ncb.ncb_command  = (byte)NCBCONST.NCBRESET;
                    Ncb.ncb_lana_num = lenum.lana[i];
                    uRetCode         = Win32API.Netbios(ref Ncb);

                    if (uRetCode != (short)NCBCONST.NRC_GOODRET)
                    {
                        return("");
                    }

                    Ncb.ncb_command     = (byte)NCBCONST.NCBASTAT;
                    Ncb.ncb_lana_num    = lenum.lana[i];
                    Ncb.ncb_callname[0] = (byte)'*';
                    cb = Marshal.SizeOf(typeof(ADAPTER_STATUS))
                         + Marshal.SizeOf(typeof(NAME_BUFFER))
                         * (int)NCBCONST.NUM_NAMEBUF;
                    Ncb.ncb_buffer = Marshal.AllocHGlobal(cb);
                    Ncb.ncb_length = (ushort)cb;
                    uRetCode       = Win32API.Netbios(ref Ncb);
                    adapter.adapt  = (ADAPTER_STATUS)Marshal.PtrToStructure(
                        Ncb.ncb_buffer, typeof(ADAPTER_STATUS));
                    Marshal.FreeHGlobal(Ncb.ncb_buffer);

                    if (uRetCode == (short)NCBCONST.NRC_GOODRET)
                    {
                        if (i > 0)
                        {
                            addr += ":";
                        }
                        addr = string.Format(
                            "{0,2:X}{1,2:X}{2,2:X}{3,2:X}{4,2:X}{5,2:X}",
                            adapter.adapt.adapter_address[0],
                            adapter.adapt.adapter_address[1],
                            adapter.adapt.adapter_address[2],
                            adapter.adapt.adapter_address[3],
                            adapter.adapt.adapter_address[4],
                            adapter.adapt.adapter_address[5]);
                    }
                }
            }
            catch { }

            //方法二
            string str = "\n";

            try
            {
                ManagementClass            mc  = new ManagementClass("Win32_NetworkAdapterConfiguration");
                ManagementObjectCollection moc = mc.GetInstances();

                foreach (ManagementObject mo in moc)
                {
                    if ((bool)mo["IPEnabled"] == true)
                    {
                        str += string.Format("MAC adress: {0}", mo["MacAddress"].ToString());
                    }
                    mo.Dispose();
                }
            }
            catch {  }

            //方法三
            IList <string> MAC = new List <string>();
            string         mac = "\n";

            try
            {
                ManagementClass            mc  = new ManagementClass("Win32_NetworkAdapterConfiguration");
                ManagementObjectCollection moc = mc.GetInstances();

                foreach (ManagementObject mo in moc)
                {
                    if ((bool)mo["IPEnabled"] == true)
                    {
                        MAC.Add(mo["MacAddress"].ToString());
                    }
                    mo.Dispose();
                }

                bool Bool = true;
                for (int i = 0; i < MAC.Count; i++)
                {
                    for (int j = 0; j < MAC.Count; j++)
                    {
                        if (i == j)
                        {
                            continue;
                        }

                        if (MAC[i].Equals(MAC[j]))
                        {
                            Bool = true;
                        }
                        else
                        {
                            Bool = false;
                        }

                        if (!Bool)
                        {
                            break;
                        }

                        if (Bool)
                        {
                            mac = MAC[0];
                        }
                        else
                        {
                            for (int k = 0; k < MAC.Count; k++)
                            {
                                bool isM = true;
                                for (int m = 0; m < MAC.Count; m++)
                                {
                                    if (k == m)
                                    {
                                        continue;
                                    }

                                    if (MAC[k].Equals(MAC[m]))
                                    {
                                        isM = false;
                                        break;
                                    }
                                    else
                                    {
                                        isM = true;
                                    }

                                    if (isM)
                                    {
                                        mac = MAC[k];
                                        break;
                                    }
                                }
                            }
                        }
                    }
                }
            }
            catch { }

            return(string.Format("MacAddress: {0}\n{1}\nmacAddress:{2}", addr.Replace(' ', '0'), str, mac));
        }