精华内容
下载资源
问答
  • 获取物理网卡地址

    千次阅读 2017-12-02 14:20:43
    byte[] mac = NetworkInterface.getByInetAddress(InetAddress.getLocalHost()).getHardwareAddress(); for (int i = 0; i ; i++) { System.out.println(Integer.toHexString(mac[i]));
    byte[] mac = NetworkInterface.getByInetAddress(InetAddress.getLocalHost()).getHardwareAddress();
    			for (int i = 0; i < mac.length; i++) {
    				
    				System.out.println(Integer.toHexString(mac[i]));
    			}
    默认的是十进制 需要转换为系统表示的16进制
    展开全文
  • 如何用JAVA获取物理网卡地址?只需要在windows系统中,谢谢!
  • 这样在执行NCBASTAT命令后,由于ncb.ncb_buffer指针所指的缓冲区中为命令执行后网卡返回的统计结果(其中包含MAC网卡地址),我们使用与其同一地址的ADAPTER_STATUS结构的adapter_address[6]字段便可取出网卡地址。...

     

    以下代码枚举所有LANA号码,执行复位(NCBREST)和适配器状态(NCBASTAT)。

     #include <windows.h>
       #include <wincon.h>
       #include <stdlib.h>
       #include <stdio.h>
       #include <time.h>
    
       typedef struct _ASTAT_
       {
    
          ADAPTER_STATUS adapt;
          NAME_BUFFER    NameBuff [30];
    
       }ASTAT, * PASTAT;
    
       ASTAT Adapter;
    
       void main (void)
       {
          NCB Ncb;
          UCHAR uRetCode;
          char NetName[50];
          LANA_ENUM   lenum;
          int      i;
    
          memset( &Ncb, 0, sizeof(Ncb) );
          Ncb.ncb_command = NCBENUM;
          Ncb.ncb_buffer = (UCHAR *)&lenum;
          Ncb.ncb_length = sizeof(lenum);
          uRetCode = Netbios( &Ncb );
          printf( "The NCBENUM return code is: 0x%x \n", uRetCode );
    
          for(i=0; i < lenum.length ;i++)
          {
              memset( &Ncb, 0, sizeof(Ncb) );
              Ncb.ncb_command = NCBRESET;
              Ncb.ncb_lana_num = lenum.lana[i];
    
              uRetCode = Netbios( &Ncb );
              printf( "The NCBRESET on LANA %d return code is: 0x%x \n",
                      lenum.lana[i], uRetCode );
    
              memset( &Ncb, 0, sizeof (Ncb) );
              Ncb.ncb_command = NCBASTAT;
              Ncb.ncb_lana_num = lenum.lana[i];
    
              strcpy( Ncb.ncb_callname,  "*               " );
              Ncb.ncb_buffer = (char *) &Adapter;
              Ncb.ncb_length = sizeof(Adapter);
    
              uRetCode = Netbios( &Ncb );
              printf( "The NCBASTAT on LANA %d return code is: 0x%x \n",
                      lenum.lana[i], uRetCode );
              if ( uRetCode == 0 )
              {
                 printf( "The Ethernet Number on LANA %d is:
                         %02x%02x%02x%02x%02x%02x\n",
                lenum.lana[i],
                      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] );
              }
           }
    
       }

            众所周知,一个网卡对应唯一MAC地址,对一些应用程序来说,获取网卡MAC地址有时是必要的,使用VC提供的netbios网络编程接口可以方便获取网卡MAC地址。

            netbios中所用的函数声明、常数等等均是在头文件nb30.h内定义的,若想使用netbios,须连接的库是netapi32.lib。调用netbios函数时,使用uRetCode = netbios(&ncb)语句,其入口参数&ncb为指向一网络控制块(NCB)的指针。在该NCB结构中,包含了为执行一个netbios命令相应需预先准备(在调用前)或命令执行结果(在调用后)的全部信息,在调用netbios函数前要先预置好该NCB结构中的一些有关字段;返回码uRetCode正常时应为0,返回的具体结果会包含在NCB结构的一些字段中。

    NCB结构的定义如下: 

    typedef struct _NCB{

    UCHAR ncb_command;   //用于指定要执行的NetBIOS命令, 一些常见的NetBIOS命令如附表所示

    UCHAR ncb_retcode;       //用于指定操作的返回代码,若返回值为0,就表示操作成功

    UCHAR ncb_lsn;              //对应一个本地会话编号,成功的执行了一次NCBCALL或NCBLISTEN命令后,                                           //函数会返回一个会话编号

    UCHAR ncb_num;           //用于知道本地名字的编号,伴随NCBADDNAME或NCBADDGRNAME命令的                                           //每一次调用,都会返回一个新的编号

    PUCHAR ncb_buffer;       //指向数据缓冲区,发送时该缓冲区包含了要送出去的实际数据,接收时的接收

                                           //数据则为从NetBIOS函数返回的数据;对其他命令来说,如NCBENUM,缓冲                                          //区便是预定义的结构LANA_ENUM 

    WORD ncb_length;         //指定缓冲区的长度,以字节数为单位,接收时NetBios会将该值设为收到的字节

                                           //数,若指定的缓冲区不够大,NetBIOS就会返回NRC_BUFLEND错误

    UCHAR ncb_callname[NCBNAMSZ]; //用于指定远程应用的名字

    UCHAR ncb_name[NCBNAMSZ]; //用于指定应用程序已知的名字

    UCHAR ncb_rto;              //规定接收操作时的会话超时(以0.5秒为单位) 

    UCHAR ncb_sto;             //规定发送操作时的会话超时(以0.5秒为单位) 

    viod (CALLBACK *ncb_post) (struct _NCB *); //异步命令完成后,调用的后处理程序地址

    UCHAR ncb_lana_num; //指定LAN Adapter编号

    UCHAR ncb_cmd_cplt; //用于指定操作的返回代码,异步操作进行期间,Netbios会将这个值设为

                                         //NRC_PENDING 

    UCHAR ncb_reserve[10]; //保留,必须为0 

    HANDLE ncb_event; //事件对象的句柄,netbios函数返回非0值时会发信号给事件

    }NCB, *PNCB; 

     

    nb30.h中还定义了另外一个很重要的结构LANA_ENUM,当主机中有两块以上网卡时,使用NCB命令NCBENUM后(该命令只能在Windows NT/2000/XP中使用),该结构中会含有返回的网卡数目及其索引,该结构的定义如下:

    typedef struct LANA_ENUM { 

    UCHAR length; 

    UCHAR lana [MAX_LANA]; 

    } LANA_ENUM, *PLANA_ENUM;

    其中:lana [MAX_LANA]定义了一个存放所有网卡信息的数组,length表示该数组的长度,即为本机所带网卡的个数。此外,我们还要定义一个描述网卡的结构ASTAT,其中使用了结构ADAPTER_STATUS(也由

    nb30.h定义):

    typedef struct { 

    ADAPTER_STATUS adapt; 

    NAME_BUFFER NameBuff[30]; 

    } ASTAT; 

    其中的ADAPTER_STATUS结构为

    typedef struct _ADAPTER_STATUS { 

    UCHAR adapter_address[6]; //网卡MAC地址

    UCHAR rev_major; 

    UCHAR reserved0; 

    UCHAR adapter_type; 

    UCHAR rev_minor; 

    WORD duration; 

    WORD frmr_recv; 

    WORD frmr_xmit; 

    WORD iframe_recv_err; 

    WORD xmit_aborts; 

    DWORD xmit_success; 

    DWORD recv_success; 

    WORD iframe_xmit_err; 

    WORD recv_buff_unavail; 

    WORD t1_timeouts; 

    WORD ti_timeouts; 

    DWORD eserved1; 

    WORD free_ncbs; 

    WORD max_cfg_ncbs; 

    WORD max_ncbs; 

    WORD xmit_buf_unavail; 

    WORD max_dgram_size; 

    WORD pending_sess; 

    WORD max_cfg_sess; 

    WORD max_sess; 

    WORD max_sess_pkt_size; 

    WORD name_count; 

    } ADAPTER_STATUS, *PADAPTER_STATUS; 

    在调用netbios NCBASTAT命令前,我们可将指向ADAPTER_STATUS结构的指针值赋给缓冲区指针ncb.ncb_buffer,

    ASTAT Adapter; 

    ncb.ncb_buffer = (unsigned char *) &Adapter; //两个指针指向同一个地方

    ncb.ncb_length = sizeof(Adapter); // 设置ncb_buffer缓冲区长度

    这样在执行NCBASTAT命令后,由于ncb.ncb_buffer指针所指的缓冲区中为命令执行后网卡返回的统计结果(其中包含MAC网卡地址),我们使用与其同一地址的ADAPTER_STATUS结构的adapter_address[6]字段便可取出网卡地址。

    几点说明:

    1.由于ncb_command字段用于指定要执行的netbios命令,所以总是在执行一个netbios命令之前设置该

    ncb_command字段。例如:

    (1)我们要获取当前计算机有多少个网卡,则可用以下一段代码来实现:

    NCB ncb; 

    UCHAR uRetCode = Netbios(&ncb); 

    int num; //标识网卡个数

    num = lana_enum.length; 

    (2)对网卡进行初始化可用以下代码实现:

    memset(&ncb, 0, sizeof(ncb)); 

    ncb.ncb_command = NCBRESET; 

    ncb.ncb_lana_num = 0; 

    uRetCode = Netbios(&ncb ); 

    (3)查询网卡包括MAC地址等在内的信息可用以下代码实现:

    memset(&ncb, 0, sizeof(ncb)); 

    ncb.ncb_command = NCBASTAT; 

    ncb.ncb_lana_num = 0; 

    sNetBiosName ="*";

    FillMemory(ncb.ncb_callname, NCBNAMSZ - 1, 0x20); 

    strcpy((char *)ncb.ncb_callname, (LPCTSTR) sNetBiosName); 

    ncb.ncb_callname[sNetBiosName.GetLength()] = 0x20; 

    ncb.ncb_callname[NCBNAMSZ] = 0x0; 

    ASTAT Adapter; 

    ncb.ncb_buffer = (unsigned char *) &Adapter; 

    ncb.ncb_length = sizeof(Adapter); 

    uRetCode = Netbios(&ncb);

    转载于:https://my.oschina.net/SecCode/blog/1540079

    展开全文
  • java 获取本地ip地址,mac物理网卡地址,用java来写个打印机,需要获取本地打印机的ip,mac地址 详细请查看 http://yayihouse.com/yayishuwu/chapter/2127

    java 获取本地ip地址,mac物理网卡地址,用java来写个打印机,需要获取本地打印机的ip,mac地址
    详细请查看
    http://yayihouse.com/yayishuwu/chapter/2127

    展开全文
  • 在日常应用开发时经常需要获取设备的MAC地址,由于虚拟网卡等的干扰导致获取的MAC地址错误,本VC工程提供一种基于API的MAC地址的筛选方法能够直接获取当前正在使用的物理网卡地址
  • Delphi 获取真实物理网卡地址

    热门讨论 2009-02-19 10:06:56
    Delphi 获取当前网卡地址 永久网卡地址 厂商信息
  • 通过注册表获取网卡物理地址,比较靠谱
  • VB获取网卡物理地址,也就是MAC地址,网络编程必备的基础知识,通过本例子,你将掌握这一知识技巧。
  • 主要介绍了js获取客户端网卡的IP地址、MAC地址的方法,需要的朋友可以参考下
  • vc++获取网卡MAC地址的三种方法.zip visual c++取得网卡物理地址的三种方法.zip
  • JAVA得到网卡物理地址(windows和Linux)
  • Delphi获取当前计算机内所有网卡物理地址。 设计思路: 1 从注册表内获取计算机内所有网卡列表 2 根据网卡ID来获取网卡的mac地址获取规范比之网络上流传的大部分delphi获取网卡的源码都实用。 PS:当...
  • 看一下我这边通过ipconfig /all 跑出来的结果,大家猜猜看,哪个才是我的物理网卡呢? 看名称?看描述,看NetBIOS启用状态?唉,都不靠谱,你能想到是第一个标着fake_wlan,描述带Hyper-V的才是我的物理网卡么? ...

    我们经常会在代码中查找设备的Mac地址,以确认设备的唯一性。但是如果你的设备安装了一些虚拟机,这个时候就会比较麻烦了


    出现问题

    看一下我这边通过ipconfig /all 跑出来的结果,大家猜猜看,哪个才是我的物理网卡呢?

    在这里插入图片描述

    看名称?看描述,看NetBIOS启用状态?唉,都不靠谱,你能想到是第一个标着fake_wlan,描述带Hyper-V的才是我的物理网卡么?

    How

    那么如何才能去找到我们的物理网卡信息呢?

    OK,首先的一个问题是如何找到网卡信息。德熙这边的博客有介绍了dotnet core 获取 MacAddress 地址方法,不过很不巧这里面没有介绍虚拟网卡和物理网卡的区分方法。

    不过,德熙的博客里面介绍了使用WMI,查询Win32_NetworkAdapterConfiguration的方式找到网络适配器的信息。对于系统来说物理网卡和虚拟网卡的Win32_NetworkAdapterConfiguration是没有区别的,所以这里我们看不出分别(Ipconfig也是如此)

    但是WMI有另外一个信息叫做,Win32_NetworkAdapter,他包含了网络适配器的信息。

    而这个信息中最关键的两点是NetConnectionStatusPNPDeviceID,前者代表了网络连接状态,可以过滤哪些不在上网的设备,后者更为重要,表示设备实例路径,就是下面这个家伙

    在这里插入图片描述

    设备实例路径有什么用呢?小Track就是物理网卡的设备实例路径都是以"PCI"开头的,(当然你要说厂家喜欢乱来,或者自己把里面的内容改了,那我也没有办法)。

    OK,有了这些知识,我们写代码就很方便了。

    额,不完全是。这个其实是跟点击其他程序窗口这一操作有关。其实你只要启动时点击其他窗口的手速够快,也能出现。

    我们看看MessageBox的源码。当我们采用MessageBox.Show方法重载不带有owner参数时,他会通过GetActiveWindow这个方法获取当前激活的窗口,作为owner。而我们通过只要在程序执行到这里之前点击其他程序窗口,就会出现上述问题

    在这里插入图片描述

            static string Bar()
            {
                var managementClass = new ManagementClass("Win32_NetworkAdapter");
                var managementObjectCollection = managementClass.GetInstances();
                var builder = new StringBuilder();
                foreach (var managementObject in managementObjectCollection.OfType<ManagementObject>())
                {
                    using (managementObject)
                    {
                        if (managementObject["NetConnectionStatus"] != null
                            &&  managementObject["NetConnectionStatus"].ToString() == "2"
                            && managementObject["PNPDeviceID"].ToString().Contains("PCI"))
                        {
                            if (managementObject["MacAddress"] == null)
                            {
                                continue;
                            }
    
                            builder.AppendLine(managementObject["MacAddress"].ToString().ToUpper());
                        }
                    }
                }
    
                return builder.ToString();
            }
    

    结果如下,只剩下一个1C开头的我们的物理网卡的Mac地址了

    在这里插入图片描述

    参考链接:


    本文会经常更新,请阅读个人博客原文: https://xinyuehtx.github.io/ ,以避免陈旧错误知识的误导,同时有更好的阅读体验。

    知识共享许可协议 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。欢迎转载、使用、重新发布,但务必保留文章署名黄腾霄(包含链接: https://xinyuehtx.github.io/ ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请 与我联系

    展开全文
  • C#实现获取网卡IP地址方法,该方法可以遍历出所有网卡的IP地址
  • 原生网卡地址,物理网卡地址获取
  • 这里我们使用windows的函数GetBestInterface(destIP,index), 系统会给一个到指定IP地址的最适合的网卡的序列号,通过这个序列号再遍历各个网卡就可以得到当前系统所用的网卡是哪一个,如果只有一个物理网卡,也默认...
  • 转载:VC 获取物理网卡的MAC地址

    千次阅读 2018-07-14 10:04:37
    文章来源:https://blog.csdn.net/kingepoch/article/details/24108653获取网卡的MAC地址的方法很多,如:Netbios,SNMP,GetAdaptersInfo等。经过测试发现 Netbios 方法在网线拔出的情况下获取不到MAC,而 SNMP方法...
  • 在PB中得到网卡号及IP地址
  • java获取网卡物理地址

    千次阅读 2011-03-07 23:02:00
    package otherexample; import java.net.NetworkInterface; import java.util.Enumeration; public class Cpu_Mac { public static void main(String[] args) { System.out.print(getMac());...protect...
  • Demo中演示了七种获取电脑网卡MAC的方法(方法都是网上搜集的),顺便试了获取硬盘序列号和CUP序列号。多网卡的情况下,七种方法获取到的MAC有可能不一样,多试试吧,总有一种是适合你使用的。
  • 获取物理网卡MAC地址

    2009-05-25 21:31:40
    不像网上很多的那种,根本不能调试,缺少文件,还识别不了物理网卡信息,该程序简洁易理解但功能实现。操作如下: The NCBRESET on LANA 0 return code is: 0x0 The NCBASTAT on LANA 0 return code is: 0x0 The ...
  • 获取网卡物理地址工具是一款获取远程网卡MAC地址的免费辅助工具(根据IP地址获取网卡MAC地址),小巧实用。
  • 基本的思路就是用route命令列出所有的网卡名,然后再用ifconfig配合字符串匹配找出对应的ip地址,示例如下: #!/bin/bash function ips(){ local nics=$(route -n | grep ^0.0.0.0 | awk '{print $8}') for nic ...
  • 获取本地的“物理网卡的IP地址和MAC地址,并区分是有线设备,还是无线设备!函数已经封装好,直接可以调用。发现BUG请反馈,多谢!
  • 获取计算机的mac地址和ip地址,mac地址返回的是一个list,ip地址是string
  • 获取网卡MAC地址.vbs

    2020-05-09 08:56:00
    一个能够获取本机网卡MAC地址的vbs文件。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
  • MAC物理地址获取两种方式

    千次阅读 2019-04-08 21:04:50
    MAC物理地址具有唯一性,绑定在网卡上 最近做了有关获取客户端MAC地址的需求,一般来看是不会有这种不合理的需求,目前对于MAC地址获取浏览器默认为属于一种脚本木马,仅有IE浏览器目前支持JS获取客户端的MAC物理...
  • 适用于linux环境的C语言程序,获取网卡MAC地址,附详细操作说明,两种方式写成的程序,都能达到所需功能,测试可用。
  • C#获得本机物理网卡的MAC地址

    万次阅读 2014-07-02 14:54:44
    今天中午吃饭前看到四月份记录的一个bug,当电脑上插了自己的无线时,软件无法打开的情况,当时也没去解决(客户说拔了无线就好了)...简单搜了下,参考这篇文章,结合msdn上的描述和本机测试,把获得本机物理网卡的MAC

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 47,408
精华内容 18,963
关键字:

获取物理网卡地址