用c#获取本机mac(通过dll调用)
2004-09-28 11:08
513 查看
using System;
using System.Net;
using System.Runtime.InteropServices;
public enum NCBCONST
[StructLayout(LayoutKind.Sequential)]
public struct ADAPTER_STATUS
[StructLayout(LayoutKind.Sequential)]
public struct NAME_BUFFER
[StructLayout(LayoutKind.Sequential)]
public struct NCB
[StructLayout(LayoutKind.Sequential)]
public struct LANA_ENUM
[StructLayout(LayoutKind.Auto)]
public struct ASTAT
public class Win32API
class GetMac
public static void Main()
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)
Console.WriteLine("");
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)
Console.WriteLine( "");
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]);
}
}
Console.WriteLine( addr.Replace(' ', '0'));
}
}
using System.Net;
using System.Runtime.InteropServices;
public enum NCBCONST
[StructLayout(LayoutKind.Sequential)]
public struct ADAPTER_STATUS
[StructLayout(LayoutKind.Sequential)]
public struct NAME_BUFFER
[StructLayout(LayoutKind.Sequential)]
public struct NCB
[StructLayout(LayoutKind.Sequential)]
public struct LANA_ENUM
[StructLayout(LayoutKind.Auto)]
public struct ASTAT
public class Win32API
class GetMac
public static void Main()
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)
Console.WriteLine("");
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)
Console.WriteLine( "");
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]);
}
}
Console.WriteLine( addr.Replace(' ', '0'));
}
}
相关文章推荐
- 通过silktest调用c#写的工具获取dll文件信息的方法
- 在VS2010中调用COM Interop DLL操作Excel通过get_Range去获取Range时,会发生Object does not contain a definition for get_Range的错误。其原因和解决方案
- C# 通过dllImport 调用C++ Dll 小总结
- python通过scapy获取局域网所有主机mac地址示例
- 在 C# 中通过 P/Invoke 调用Win32 DLL
- 获取DLL的文件路径以及调用DLL的文件路径
- 关于C++调用C#封装的dll后,获取C#中string返回值的问题
- 通过异步过程调用(APC)注入DLL
- JAVA方法中通过调用URL来获取其返回的内容
- ios开发不越狱获取本地应用列表通过调用运行时库
- Linux下java调取命令通过ip获取mac地址
- C++通过DLL调用C#代码
- qt 获取windows 的消息(通过MFC的DLL的透明窗体转发消息)good
- c++获取进程信息列表和进程所调用的dll列表
- web developer tips (83):通过反射从堆栈里获取调用的方法名称
- linux下根据ip调用命令获取mac
- 通过反射调用的类中使用Spring@Autowired自动装配的成员为空的解决办法不依赖servlet context获取Spring Application Contexts
- java 通过反射获取调用类方法及属性
- iframe子窗体和父窗体互相调用,通过document.getElementById("name_iframe").contentWindow获取iframe的window对象,支持多浏览器!
- 在内核模块中通过系统调用ioctl获取ATA/SCSI硬盘序列号