网卡连通的时候是能得到本机MAC地址的,可是,当我们没有连在网上,或者禁用了本机的
网卡,此时就找不到MAC地址了,谁有方法能得到此时的MAC地址呢?
谢谢了!
我找了网上的资料,几天了,还是没能找到,希望大家能帮个忙,100分送!!!

解决方案 »

  1.   

    禁用网卡就是禁用网卡的所有功能,一旦被禁用,就好像电脑上根本没有安装网卡一样了
    MAC是保存在网卡的芯片中的,要获得MAC,网卡必须正常工作,
    如果禁用的时候还能获得MAC,那禁用就没有意义了因此在禁用状态下无法获得MAC
      

  2.   

    网卡在禁用或断网的时候,网卡已经不工作了,系统无法和网卡通信,所以IP,MAC都取不出来
      

  3.   

    我用的是2K系统,当你的网卡被禁止后,MAC地址是显示不出来的,在计算机管理是显示为不能用!
      

  4.   

    你用netstat -a 命令试哈啊 实在不行就没办法了
      

  5.   

    谢谢各位的意见!
    但是我认为应该在机器的系统文件里或者是在注册表里保存了此网卡的MAC地址.因为网卡初始装上去的时候,驱动程序,MAC地址等都是一次性写入系统里的,系统以后每次启动都不需要再读网卡的MAC地址了,只要读系统文件或者是注册表,所以,我总是找不到已经保存了的MAC地址放在了什么地方,不知道各位有没有解决过这样的问题!
      

  6.   

    呵呵,这个就要看windows api了,自己试一下就知道了。
      

  7.   

    禁用时是得不到,但用在网上搜到的方法在未接入网络时也查不到!!但用ipconfig/all命令是可以得到MAC地址的!!
    而且有具是可以更改MAC地址(更改系统的MAC地址,也是欺骗系统的做法),所以我想应该是保存在注册表中的!
      

  8.   

    如果是要获得本机的MAC地址,我是用这种方法获得本机的MAC地址,如果是禁止了网卡了就不行了!禁止了也根本拿不到!
    public static string GetLocalCardAddress()
    {
    string mac = ""; System.Diagnostics.Process process = new System.Diagnostics.Process();
    process.StartInfo.FileName = "ipconfig";
    process.StartInfo.Arguments = "/all";
    process.StartInfo.UseShellExecute = false;
    process.StartInfo.CreateNoWindow = true;
    process.StartInfo.RedirectStandardOutput = true; process.Start(); string output = process.StandardOutput.ReadToEnd();
    int length = output.IndexOf("Physical Address. . . . . . . . . : "); if(length>0)
    {
    mac = output.Substring(length+36, 17);
    } process.WaitForExit(); return mac;
    }
      

  9.   

    在注册表里有相应的项
    public static void Main()
    {
    Registrykey start = Registry.LocalMachine;
    RegistryKey cardServiceName, networkKey ;
    string networdCardKey = @"SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkCards" ;
    string servicesKey = @"SYSTEM\CurrentControlSet\Services\" ;
    string networkcardKeyName , deviceName ;
    string deviceServiceName,   serviceName ; RegistryKey serviceNames = start.OpenSubKey(networkcardKey) ; if (serviceNames == null)
    {
    Console.WriteLine ("Bad registry key") ;
    return ; } string [] networkCards = serviceNames.GetSubKeyNames();
    serviceNames.Close() ; foreach(string keyName in networkCards)
    {
    networkcardName = networkcardKey + "\\" + keyName ;
    cardServiceName = start.OpenSubKey(networkcardKeyName) ;
    if (cardServiceName = null)
    {
    Console.WriteLine("Bad registry key: {0}", networkcardKeyName) ;
    return; }
    deviceServiceName = (string ) cardServiceName.GetValue ("ServiceName") ;
    deviceName = (string ) cardServiceName.GetValue ("Description") ;
    Console.WriteLine ("\nNetwork card: {0}", deviceName) ; serviceName = serviceKey + deviceServiceName + "\\Parameters\\Tcpip" ;
    networkKey = start.OpenSubKey(serviceName) ;
    if (networkKey == null)
    {
    Console.WriteLine("  No ip configuration ser") ;

    else
    {
    string [] ipaddresses = (string [] ) networkKey.GetValue ("IPAddress") ;
    string [] defaultGatways = (string []) networkKey.GetValue ("DefaultGateway") ;
    string [] subnetmasks = (string [] )networkKey.GetValue ("SubnetMask");
    }
    }
    }
    可以结贴给分了
    哈哈!!^_^!
      

  10.   

    搂主没有说清楚怎么得到mac。至少,对于windows来说,只要网卡驱动工作正常,就能获得MAC地址。与是否禁用无关。禁用网卡,是windows的通讯行为,网卡的驱动还在,物理网卡还在,你是怎么样获得网卡mac的呢?如果采用比较曲折(但是简单)的手段,当然就无法获得。
      

  11.   

    还有,楼上那么多回复的,竟然少有类似 WMI 等观念的,在这个 .net 时代,真是对 CSDN 寒呀!
      

  12.   

    网卡默认的MAC地址在网卡芯片上,如果没有手动指定,那么禁用了网卡理论上是不能得到MAC的(不过系统是不是在注册表里面有保存,我不知道);
    如果你手动指定了MAC的话,那么在注册表里面是有的,在类似这样的地方:
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002bE10318}\0014\NetworkAddress : 101111111111
    比如上面的地址是我的篮牙虚拟网卡的地址...