我想取得机器的Mac地址,语言是C#:
一、windows应该程序.exe,即.exe运行时,取得本机的Mac,该怎样取?能给出代码吗?同时请注意,如果本机的操作系统分别是win98、win2000,是否应该注意区分,同时是否应该区别16位或32位操作系统,当然这个可能有些过虑了。二、web方式的取客户端Mac地址,请注意是客户端,而不是服务器端。同时有两点疑虑:
1.是否要考虑客户端的操作系统诸如win98、win2000的区别。
2.是否要考虑直接拨号上网和代理上网的区别。
如果用的是activeX、dll等方式,就免了,我可以参照一,您就请顶一下,分一样给。非常感谢。
在有正解之前顶者有分。

解决方案 »

  1.   

    public  string GetMac(string IP) //para IP is the client's IP
    {
    string dirResults="";
    ProcessStartInfo psi  = new ProcessStartInfo();
    Process proc = new Process();
    psi.FileName = "nbtstat";
    psi.RedirectStandardInput = false;
    psi.RedirectStandardOutput = true;
    psi.Arguments = "-A " + IP;
    psi.UseShellExecute = false;
    proc = Process.Start(psi);
    dirResults = proc.StandardOutput.ReadToEnd();
    proc.WaitForExit();
    dirResults=dirResults.Replace("\r","").Replace("\n","").Replace("\t","");Regex reg=new Regex("Mac[ ]{0,}Address[ ]{0,}=[ ]{0,}(?<key>((.)*?))__MAC",RegexOptions.IgnoreCase|RegexOptions.Compiled);
    Match mc=reg.Match(dirResults+"__MAC");if(mc.Success) 
    {
    return mc.Groups["key"].Value;
    }
    else
    {
    reg=new Regex("Host not found",RegexOptions.IgnoreCase|RegexOptions.Compiled);
    mc=reg.Match(dirResults);
    if(mc.Success)
    {
    return "Host not found!";
    }
    else
    {
    return "";
    }
    }
    }
      

  2.   

    获取本机IP:using System.Management;
    ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
    ManagementObjectCollection moc = mc.GetInstances();
    StringBuilder sb = new StringBuilder();
    foreach(ManagementObject mo in moc)
    {
    if((bool)mo["IPEnabled"] == true)
    sb.Append(mo["MacAddress"].ToString());
    mo.Dispose();
    }
    MessageBox.Show(sb.ToString());操作系统不必考虑
    但是楼上的方法只能取得局域网同一个网段内电脑的IP,过了网关就不行了,这种情况下必须得用ActiveX
      

  3.   

    楼上的几位都没分是windows应该程序和web程序。
    而且一楼这位说的是可以,但是会闪过一个nbtstat的窗口。
      

  4.   

    c#windows程序和web程序没有本质的区别,都用的同一个类库;
    一楼的程序如果想不出现窗口,再加个属性就行了
    psi.CreateNoWindow = true;
    psi.WindowStyle = ProcessWindowStyle.Hidden;
      

  5.   

    web方式取客户端的mac地址,一般要用ActiveX.
      

  6.   

    to fancyf:
    windows程序和web程序当然有区别,即使用的是同一个类库,
    如果是windows程序,取的就是本机(当然如果有需要你还可以取同一网段的别的机器);如果是web程序,取的却是Web服务器的,而我要取的却是客户端的mac。
    是这样的吧
      

  7.   

    using System.Net.Sockets ;
    using System.Management;ManagementObjectSearcher  searcher = new ManagementObjectSearcher("SELECT * FROM Win32_NetworkAdapterConfiguration");// Win32_NetworkAdapter");
    foreach (ManagementObject share in searcher.Get())
    {
    try
    {
    string sNetCardID=share["MACAddress"].ToString();
    string sIP=share["IPAddress"].ToString();
    if(sNetCardID!="")
    {
    return sNetCardID;
    }
    }
    catch
    {
    }
    }
      

  8.   

    要取得客户端的MAC,只能用一楼的方法。但一楼的方法仅限于取得局域网内部的电脑。如果要取得局域网以外的其他客户端的MAC,除非用ActiveX,仅在服务器端编程无法实现。
    所以windows程序和web程序没有本质的区别
      

  9.   

    看看命名空间添加了吗?一楼需要 using System.Diagnostics;
      

  10.   

    谢谢fancy,谢谢以上的各位。