获取MAC地址和IP地址的程序设计

合集下载

C#得到局域网内所有主机名,IP地址,MAC地址

C#得到局域网内所有主机名,IP地址,MAC地址

原文地址:C#得到局域网内所有主机名,IP地址,MAC地址作者:西西里の哈皮Keviprivate void btnCheck_Click(object sender, EventArgs e){string ipAddress = this.cboBoxIp.Text.Trim();Regex rgx = newRegex(@"^([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0 -9]|25[0-5])){3}$");if (rgx.IsMatch(ipAddress)){belIpResult.Text = GetName(ipAddress);belMacResult.Text = GetMacAddress(ipAddress);}else{belIpResult.Text = "IP address is not valid.";belMacResult.Text = "No mac result";}}/// <summary>/// 得到所有局域网内机器名/// </summary>private void GetAllLocalMachineName(){System.Diagnostics.ProcessStartInfo prcssStrtInfo = newSystem.Diagnostics.ProcessStartInfo();prcssStrtInfo.FileName = @"C:windowssystem32cmd.exe";prcssStrtInfo.Arguments = @"/c net view > F:\LanMachineName.txt"; // 将所有局域网机器名输出到文本文件prcssStrtInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;System.Diagnostics.Process.Start(prcssStrtInfo);}/// <summary>/// 通过Ip地址获得主机名/// </summary>/// <param name="IpAddress"></param>/// <returns></returns>private string GetName(string IpAddress)//获取指定IP的计算机名称{string name="";try{IPHostEntry ipHstEntry = Dns.GetHostByAddress(IpAddress);//传递IP地址 //IPHostEntry ipHstEntry = Dns.GetHostEntry(IpAddress);name = ipHstEntry.HostName.ToString();//取得主机名}catch (Exception e){name = e.Message;}return name;}/// <summary>/// 通过Ip得到MAC地址/// </summary>/// <param name="IpAddress"></param>/// <returns></returns>private string GetMacAddress(string IpAddress)//得到指定IP的MAC地址{string macAddress = "";Int32 ldest = 0;try{ldest = inet_addr(IpAddress);}catch (Exception iperr){MessageBox.Show(iperr.Message);}Int64 macinfo = new Int64();Int32 len = 6;try{int res = SendARP(ldest, 0, ref macinfo, ref len);}catch (Exception err){// throw new Exception("在解析MAC地址过程发生了错误!");MessageBox.Show(err.Message);}string originalMACAddress = macinfo.ToString("X4");if (originalMACAddress != "0000" && originalMACAddress.Length == 12){ //合法MAC地址string mac1, mac2, mac3, mac4, mac5, mac6;mac1 = originalMACAddress.Substring(10, 2);mac2 = originalMACAddress.Substring(8, 2);mac3 = originalMACAddress.Substring(6, 2);mac4 = originalMACAddress.Substring(4, 2);mac5 = originalMACAddress.Substring(2, 2);mac6 = originalMACAddress.Substring(0, 2);macAddress = mac1 + ":" + mac2 + ":" + mac3 + ":" + mac4 + ":" + mac5 + ":" + mac6; //canPing = true;}else{macAddress = "无法探测到MAC地址";//canPing = false;}return macAddress;}。

C# .net获取电脑IP和MAC

C# .net获取电脑IP和MAC

C# .net获取电脑IP和MAC/// <summary>/// 取得用户客户端IP(穿过代理服务器取远程用户真实IP地址)/// </summary>public static string GetClientIP(){//如果使用代理,获取真实IPstring userip = string.Empty;if(HttpContext.Current.Request.ServerVariables["HTTP_X_FORW ARDED_FOR"] != ""){userip = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];}else{userip = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];}if (userip == null || userip == ""){userip = erHostAddress;}return userip;//HttpRequest Request = HttpContext.Current.Request;//try//{// if (HttpContext.Current.Request.ServerVariables["HTTP_VIA"] != null)// {// return HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"].ToString();// }// else// {// return HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"].ToString();// }//}//catch { return "127.0.0.1"; }}//获取mac地址public static string GetCustomerMac(){string IP = GetClientIP();string dirResults = "";ProcessStartInfo psi = new ProcessStartInfo();Process proc = new Process();psi.FileName = "nbtstat";psi.RedirectStandardInput = false;psi.RedirectStandardOutput = true;psi.Arguments = "-a " + IP;eShellExecute = false;proc = Process.Start(psi);dirResults = proc.StandardOutput.ReadToEnd();proc.WaitForExit();//匹配mac地址Match m = Regex.Match(dirResults, "\\w+\\-\\w+\\-\\w+\\-\\w+\\-\\w+\\-\\w\\w");//若匹配成功则返回mac,否则返回找不到主机信息if (m.ToString() != ""){return m.ToString();}else{return "找不到主机信息";}}。

获取设备信息——获取客户端ip地址和mac地址

获取设备信息——获取客户端ip地址和mac地址

获取设备信息——获取客户端ip地址和mac地址1、获取本地IP(有可能是内⽹IP,192.168.xxx.xxx)/*** 获取本地IP** @return*/public static String getLocalIpAddress() {try {Enumeration<networkinterface> en = NetworkInterface.getNetworkInterfaces();while (en.hasMoreElements()) {NetworkInterface ni = en.nextElement();Enumeration<inetaddress> enIp = ni.getInetAddresses();while (enIp.hasMoreElements()) {InetAddress inet = enIp.nextElement();if (!inet.isLoopbackAddress()&& (inet instanceof Inet4Address)) {return inet.getHostAddress().toString();}}}} catch (SocketException e) {// TODO Auto-generated catch blocke.printStackTrace();}return "0";}</inetaddress></networkinterface>2.获取⽹络ip,⽐上述⽅法更加精确,但是要异步执⾏。

public class GetLocalHostIP implements Callable<String>{private GetLocalHostIP(){super();}public static String getIP(){ExecutorService executorService = Executors.newCachedThreadPool();Future<String> localIP = executorService.submit(new GetLocalHostIP());String ip = null;try {ip = localIP.get();}catch (InterruptedException e){e.printStackTrace();}catch (ExecutionException e){e.printStackTrace();}if(ip == null || ip.startsWith("192.168")){return "10.142.92.242";}else{return ip;}}@Overridepublic String call() throws Exception {URL infoUrl = null;String ipLine = "";try {infoUrl = new URL("");BufferedReader in = new BufferedReader(new InputStreamReader(infoUrl.openStream()));ipLine = in.readLine();} catch (Exception e) {try {infoUrl = new URL("/");BufferedReader in = new BufferedReader(new InputStreamReader(infoUrl.openStream()));ipLine = in.readLine();} catch (Exception e2) {e2.printStackTrace();}}return ipLine;}}上述⽅法可以获取ip,但是获取速度较慢,对⽹速要求较⾼。

获取IP地址与MAC地址的对应关系报告

获取IP地址与MAC地址的对应关系报告

主机 A
主机 X
主机 B
主机 Y
假设在一个以太网中,主机 A 欲获得主机 B 的 IP 地址 Ib 与 MAC 地址 Pb 的映射关系, ARP 协议的工作过程为: ①主机 A 广播发送一个带有主机 B 的 IP 地址 Ib 同时带有本机 IP 地址与 MAC 地址对应 关系的请求信息包,请求主机 B 用它的 IP 地址 Ib 和 MAC 地址 Pb 的映射关系进行响应; ②以太网中的所有主机(包括主机 A 和 B 在内)接收到这个请求信息,并记录下主机 A 的 IP 地址与 MAC 地址之间的对应关系; ③主机 B 识别该请求信息,并向主机 A 发送带有自己的 IP 地址 Ib 和 MAC 地址 Pb 映射 关系的响应信息包; ④主机 A 得到主机 B 的 IP 地址与 MAC 地址之间的对应关系,并且在随后的数据发送过 程中使用该映射关系。 注:可以使用高速缓存技术对 ARP 工作过程进行优化,但是这个实验不要求我们实现。
获取 IP 地址与 MAC 地址的对应关系实验报告
一、实验目的: 在以太网中获取 MAC 地址常常是其他工作的前提。 本实验要求使用系统提供的命令和利 用 WinPcap 编程两种方式获取以太网中主机的 MAC 地址。学习 ARP 的工作过程,深入了解 IP 地址和 MAC 地址的有关概念。 二、实验环境与工具 本实验使用以太网中的主机,以太网既可以是共享式以太网也可以是交换式以太网。 应 用程序开发工具为 Microsoft Visual Studio 2010,MFC 三、实验原理 1、如何获取远程主机 IP 地址与 MAC 地址之间的对应关系(ARP 基本思想) :
址和源 IP 地址要用虚拟的地址(因为此时不知道本机的 MAC 地址是什么) ,本机收到 ARP 请求后马上做出响应; �本机的应用程序捕捉到此 ARP 响应,获取本机的 MAC 地址,从而得到本机 IP 地址与 MAC 地址之间的对应关系。

wifi下获取ip和mac地址

wifi下获取ip和mac地址

52
bt n=( But t on) f i ndVi ewByI d( R. i d. bt n) ;
53
i p_t x t =( Edi t Text ) f i ndVi ewByI d( R. i d. i p_t x t ) ;
54
mac_t xt =( Edi t Text ) f i ndVi ewBy I d( R. i d. mac_ t xt ) ;
23 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
24 / / 正文
25 pac kage com. wi f i ;
26
27 i mp or t j ava. n et . I net Addr es s;
28 i mp or t j ava. n et . Net wor kI nt er f ac e;
29 i mp or t j ava. n et . Socket Exce pt i on ;
06 / / 布局
07 <But t on
08
andr o i d: i d=" @+i d/ b t n"
09
andr o i d: t ext =" 获取 I P"
10
andr o i d: l ayout _wi d t h=" f i l l _p ar ent "
11

获取计算机IP地址和主机名及MAC地址

获取计算机IP地址和主机名及MAC地址
int nRetCode;
nRetCode = gethostname(szHostName,sizeof(szHostName));
if(nRetCode != 0)
{
return WSAGetLastError();
}
sHostName = szHostName;
return 0;
}
获得IP地址
指导教师意见
签名: 年 月 日
注:各学院可根据教学需要对以上栏木进行增减。表格内容可根据内容扩充。
答:是入口参数。
2.函数GetIPAddress(const Cstring& sHostName,Cstring& sIPAddress)中的形参是出口参数还是入口参数?
答:是入口参数。
3.在上面程序中我们并没有让确定按钮发挥作用,看看能否将程序改为不要一运行就能在窗口上看到结果,而需要点击确定按钮后才看到结果,请说明如何做?
(3)在弹出的MFC AppWizard-Step1of 4对话框中选择Dialog Based(对话框基础)单选项,然后单击下一步按钮。
(4)在MFC AppWizard-Step2 of 4对话框中注意勾选windows sockets支持复选框,在标题对话框中输入想显示的窗口标题(例如:获取主机名和IP地址),然后单击下一步按钮。
{
free(pAdapterInfo);
pAdapterInfo=(IP_ADAPTER_INFO *)malloc(ulOutBufLen);
}
if((dwRetVal=GetAdaptersInfo(pAdapterInfo,&ulOutBufLen))==NO_ERROR)
{

用C#获得本机IP和Mac

用C#获得本机IP和Mac

用C#获得本机IP和Macusing System;using System.Collections.Generic;using System.Text;using ;using System.Management;namespace exp_01_1021{class Program{static void Main(string[]args){getHostInfo HostInfo=new getHostInfo();string IP=HostInfo.getIP();string Mac=HostInfo.getMac();Console.WriteLine("Local IP:{0}",IP);Console.WriteLine("MacAddress:{0}",Mac);Console.ReadLine();}}class getHostInfo{public string getIP()//获取IP{string HostName=Dns.GetHostName();//得到主机名IPHostEntry IpEntry=Dns.GetHostEntry(HostName);//得到主机IPstring strIPAddr=IpEntry.AddressList[0].ToString();return(strIPAddr);}public string getMac()//获取Mac{string MacAddr=null;ManagementObjectSearcher Query=new ManagementObjectSearcher("select* fromWin32_NetworkAdapterConfiguration");ManagementObjectCollection QueryCollection=Query.Get();foreach(ManagementObject mo in QueryCollection){if(mo["IPEnabled"].ToString()=="True")MacAddr=mo["MacAddress"].ToString();}return(MacAddr);}}}//getIP类部分使用了两个类:Dns、IPHostEntry(在命名空间中).//Dns类:主要是从域名系统(DNS)中检索关于特定主机的信息.//IPHostEntry类则将一个域名系统或主机名与一组IP地址相关联,它与DNS类一起使用,用于获取主机的IP地址组.//getMac类部分使用了两个类:ManagementObjectSearcher、ManagementObjectCollection. //在获取本机的MAC地址时,可以使用WMI规范,通过SELECT语句提取MAC地址.在.NET 框架中,WMI规范的实现定义在System.Management命名空间中.//ManagementObjectSearcher类用于根据指定的查询检索管理对象的集合.//ManagementObjectCollection类为管理对象的集合,上例中由检索对象返回管理对象集合赋值给它.。

LINUX下获取IP地址和MAC地址

LINUX下获取IP地址和MAC地址

LINUX下获取IP地址和MAC地址#include <stdio.h>#include <sys/types.h>#include <sys/param.h>#include <sys/ioctl.h>#include <sys/socket.h>#include <net/if.h>#include <netinet/in.h>#include <net/if_arp.h>#ifdef SOLARIS#include <sys/sockio.h>#endif#define MAXINTERFACES 16main (argc, argv)register int argc;register char *argv[];{register int fd, intrface, retn = 0;struct ifreq buf[MAXINTERFACES];struct arpreq arp;struct ifconf ifc;if ((fd = socket (AF_INET, SOCK_DGRAM, 0)) >= 0){ifc.ifc_len = sizeof buf;ifc.ifc_buf = (caddr_t) buf;if (!ioctl (fd, SIOCGIFCONF, (char *) &ifc)){//获取接口信息intrface = ifc.ifc_len / sizeof (struct ifreq);printf("interface num is intrface=%d\n\n\n",intrface);//根据借口信息循环获取设备IP和MAC地址while (intrface-- > 0){//获取设备名称printf ("net device %s\n", buf[intrface].ifr_name);//判断网卡类型if (!(ioctl (fd, SIOCGIFFLAGS, (char *) &buf[intrface]))){if (buf[intrface].ifr_flags & IFF_PROMISC){puts ("the interface is PROMISC");retn++;}}else{char str[256];sprintf (str, "cpm: ioctl device %s", buf[intrface].ifr_name);perror (str);}//判断网卡状态if (buf[intrface].ifr_flags & IFF_UP){puts("the interface status is UP");}else{puts("the interface status is DOWN");}//获取当前网卡的IP地址if (!(ioctl (fd, SIOCGIFADDR, (char *) &buf[intrface]))){puts ("IP address is:");puts(inet_ntoa(((struct sockaddr_in*)(&buf[intrface].ifr_addr))->sin_addr)); puts("");//puts (buf[intrface].ifr_addr.sa_data);}else{char str[256];sprintf (str, "cpm: ioctl device %s", buf[intrface].ifr_name);perror (str);/* this section can't get Hardware Address,I don't know whether the reason is module driver*/ #ifdef SOLARIS//获取MAC地址arp.arp_pa.sa_family = AF_INET;arp.arp_ha.sa_family = AF_INET;((struct sockaddr_in*)&arp.arp_pa)->sin_addr.s_addr=((structsockaddr_in*)(&buf[intrface].ifr_addr))->sin_addr.s_addr;if (!(ioctl (fd, SIOCGARP, (char *) &arp))){puts ("HW address is:");//以十六进制显示MAC地址printf("%02x:%02x:%02x:%02x:%02x:%02x\n",(unsigned char)arp.arp_ha.sa_data[0],(unsigned char)arp.arp_ha.sa_data[1],(unsigned char)arp.arp_ha.sa_data[2],(unsigned char)arp.arp_ha.sa_data[3],(unsigned char)arp.arp_ha.sa_data[4],(unsigned char)arp.arp_ha.sa_data[5]);puts("");puts("");}#else#if 0/*Get HW ADDRESS of the net card */if (!(ioctl (fd, SIOCGENADDR, (char *) &buf[intrface]))){puts ("HW address is:");printf("%02x:%02x:%02x:%02x:%02x:%02x\n",(unsigned char)buf[intrface].ifr_enaddr[0],(unsigned char)buf[intrface].ifr_enaddr[1],(unsigned char)buf[intrface].ifr_enaddr[2],(unsigned char)buf[intrface].ifr_enaddr[3],(unsigned char)buf[intrface].ifr_enaddr[4],(unsigned char)buf[intrface].ifr_enaddr[5]);puts("");puts("");#endifif (!(ioctl (fd, SIOCGIFHWADDR, (char *) &buf[intrface]))) {puts ("HW address is:");printf("%02x:%02x:%02x:%02x:%02x:%02x\n",(unsigned char)buf[intrface].ifr_hwaddr.sa_data[0], (unsigned char)buf[intrface].ifr_hwaddr.sa_data[1], (unsigned char)buf[intrface].ifr_hwaddr.sa_data[2], (unsigned char)buf[intrface].ifr_hwaddr.sa_data[3], (unsigned char)buf[intrface].ifr_hwaddr.sa_data[4], (unsigned char)buf[intrface].ifr_hwaddr.sa_data[5]);puts("");puts("");}#endifelse{char str[256];sprintf (str, "cpm: ioctl device %s", buf[intrface].ifr_name); perror (str);}} //while} elseperror ("cpm: ioctl");} elseperror ("cpm: socket");close (fd);return retn;}。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

获取MAC地址和IP地址的程序设计通信0402班学号:0905040225 姓名:张玉海指导老师: 王国才【设计目标】通过设计程序能获取本计算机的MAC地址和IP地址并显示。

【设计原理和方法】本程序设计包含两个部分:一、获取本机IP地址;二、获取本机MAC地址。

我是通过VB编程实现的。

其中,为了获取本机的IP地址,要使用WinSock库,WinSock API是Microsoft Windows 的网络程序接口。

应用程序在使用WinSock API之前,必须调用WSAstartup函数,只有调用函数成功返回(表示应用程序与WinSock库成功的简历其连接),应用程序才可以调用其他Windows Socketers .DLL中的函数。

当程序将要结束时,又必须调用WSACleanup函数可以结束Windows Socketers .DLL的使用。

WinSock规范定义了几个数据库的例程。

其中我们要用到gethostname和gethostbyname两个函数来得到IP地址。

gethostname可以获得主机名, gethostbyname函数能够从主机名得到对应的“主机”(由名字和地址标识),函数唯一的参数name就是前面调用gethostname函数得到的主机名,二返回值是一个hostent结构,他可以标识一个“主机”列表,hostent的最后一个分量hAddrList中,就可以得到与主机名对应的一个或多个IP地址,hAddrList是一个列表,通过它就可以得到所有的IP地址。

MAC地址也叫物理地址、硬件地址或链路地址,此程序设计的获取MAC地址是通过NetBIOS编程实现的。

其中,要用到网络编程接口中的一个重要的概念,那就是LANA编号(LAN适配器编号,LANadaprer),每张物理网卡都会分配一个独一无二的LANA编号。

要想调用NetBIOS API函数,需要链接系统的NETAPI.DLL文件NetBIOS API包含的内容其实分全场简单,因为实际上NetBIOS API只是一个函数NetBios ,在Visual Basic中可以这样引入:Private Declare Function Netbios Lib "netapi32.dll" (pncb As NET_CONTROL_BLOCK) As Byte函数中唯一的参数pncb是一个指向某个网络控制块(NET_CONTROL_BLOCK)的指针,在那个NET_CONTROL_BLOCK结构中,包含了为执行一个NetBIOS命令,相应的NetBios函数需要用的的前部信息。

NetBIOS提供了几个命令专门负责收集网络参数的命令,其中包括名字查找命令和适配器状态命令,利用适配器状态命令可以获得本地计算机及其LANA编号的有关信息,这就是查知其的MAC地址的一条可行路径。

其中在网络适配器状态命令的ADAPTER_STA TUS结构中我们最为关心的就是adapter_address字段,它标识的就是网卡的MAC地址。

【设计的功能】用Visual Basic进行网络编程,通过使用WinSock API和NetBIOS API分别获取IP 和MAC地址,并能够显示出来。

【程序框图】程序流程图分为两部分,获取MAC地址的部分和获取IP地址的部分。

获取MAC地址的主程序流程图如下:获取IP地址的主程序流程图如下:【设计思想及主要函数介绍】此程序的运行也分为两大块,获取IP部分和获取MAC部分。

一、获取IP部分:这部分需要调用Windows Sockets应用程序,在使用之前要对 Windows Sockets.dll 中的一些函数声明。

下面是需要用到的一些函数:连接Winsock库:int WSAstartup(WORD wversionrequested; LPWSDATA lpwsadata; )应用程序在调用Winsock API之前,必须调用该函数,只有该函数成功返回才可以调用其他Windows Sockets.dll中的函数断开Winsock库:int WSAcleanup(void)Sockets初始化函数:SocketsInitialize(),该函数就是对Windows Sockets初始化的函数,如果初始化成功,则返回值:Ture;若不成功,则返回值:Flase。

具体函数原型见程序源代码。

Gethostname函数可以得到本地主机名,其函数原型如下:Int gethostname(char name; int namelen)Name参数用来接收本地主机名的缓冲区地址;namelen参数用来接收缓冲区的大小。

Gethostbyname函数能够从主机名得到对应的“主机”,其函数原型如下:Struct hostent Gethostbyname( char name)函数唯一name就是前面调用gethostname函数得到的主机名,而返回制是一个hostent 结构,它可以标识一个“主机列表”,hostent结构定义如下:Private Type HOSTENThName As LonghAliases As LonghAddrType As IntegerhLen As IntegerhAddrList As Long从其中的最后一个分量hAddrList中,就可以得到与主机名对应的一个或多个IP地址。

hAddrList是一个列表,通过它就可以得到所有的IP地址。

在调用Winsock中的函数时应注意一些事项,如gethostbyname()指向区域是由Windows Sockets函数库分配的,这些指针指向的数据是容易丢失的。

它们只有在该线程下一个Windows Sockets API调用前有效,此外,应用程序不应该试图修改这个结构,或者释放其中的任何一部分。

主函数GetIPAddress()获得IP地址的方法稍微复杂一点,它的核心思想是先获取主机名,然后在主机名的基础上调用Gethostbyname获得描述主机的结构信息并从中解析出主机的IP地址。

二、获取MAC地址部分这部分需要调用NetBIOS API函数,需要链接系统的NETAPI.DLL文件NetBIOS API 包含的内容其实分全场简单,因为实际上NetBIOS API只是一个函数NetBios ,在VisualBasic中可以这样引入:Private Declare Function Netbios Lib "netapi32.dll" (pncb As NET_CONTROL_BLOCK) As Byte函数中唯一的参数pncb是一个指向某个网络控制块(NET_CONTROL_BLOCK)的指针,在那个NET_CONTROL_BLOCK结构中,包含了为执行一个NetBIOS命令,相应的NetBios函数需要用的的前部信息。

NET_CONTROL_BLOCK结构的定义如下:Private Type NCBncb_command As Bytencb_retcode As Bytencb_lsn As Bytencb_num As Bytencb_buffer As Longncb_length As Integerncb_callname As String * NCBNAMSZncb_name As String * NCBNAMSZncb_rto As Bytencb_sto As Bytencb_post As Longncb_lana_num As Bytencb_cmd_cplt As Bytencb_reserve(9) As Bytencb_event As LongEnd TypeNetBIOS提供了几个命令专门负责收集网络参数的命令,其中包括名字查找命令和适配器状态命令,利用适配器状态命令可以获得本地计算机及其LANA编号的有关信息,这就是查知本机的MAC地址的一条可行路径。

其中在网络适配器状态命令中的结构:ADAPTER_STATUS该结构的定义如下:Private Type ADAPTER_STATUSadapter_address(5) As Byterev_major As Bytereserved0 As Byteadapter_type As Byterev_minor As Byteduration As Integerfrmr_recv As Integerfrmr_xmit As Integeriframe_recv_err As Integerxmit_aborts As Integerxmit_success As Longrecv_success As Longiframe_xmit_err As Integerrecv_buff_unavail As Integert1_timeouts As Integerti_timeouts As IntegerReserved1 As Longfree_ncbs As Integermax_cfg_ncbs As Integermax_ncbs As Integerxmit_buf_unavail As Integermax_dgram_size As Integerpending_sess As Integermax_cfg_sess As Integermax_sess As Integermax_sess_pkt_size As Integername_count As IntegerEnd Type其中的adapter_address字段,标识的就是网卡的的MAC地址,这样就可以得到LANA 编号。

主程序GetMACAddress()中,两次调用了Netbios函数:第一次调用Netbios函数采用的是NCBRESET命令,目的是重置所有的LANA编号,第二次调用则用的是适配器状态命令NCBASTAT,通过它可取得本地计算机制定的LANA编号有关的结构信息,从这个结构信息中我们就可以解析出网卡的物理地址,然后把网卡MAC地址格式化成常用的16进制形式显示出来。

【测试数据及其结果】这个程序需要用的库函数比较多,所以要注意函数的声明,结构类型的定义,刚开是由于没有定义完全,因此编译结果总是提示“子函数未定义”,经过上网查询和翻阅资料,终于解决了所有函数的与库函数的成功连接,以及一些函数的定义。

程序的运行结果比较简单,界面简洁明了,程序操作简单、方便。

整个程序界面包括两个Label控件、两个TextBox控件、三个CommandButton控件。

两个TextBox分别用来显示IP和MAC地址,一个CommandButton用来获取IP和MAC地址,一个CommandButton 用来清空两个TextBox来重新获取IP和MAC地址,还有一个CommandButton来退出程序。

相关文档
最新文档