vb.net判断物理网卡 vb获取网卡物理地址

电脑有两张网卡。如何用vb.net分别获取网卡的IP?求大神明路!

'要使得引用System.Management有效,先通过菜单

创新互联公司是一家集网站建设,南澳企业网站建设,南澳品牌网站建设,网站定制,南澳网站建设报价,网络营销,网络优化,南澳网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。

'[项目]--[添加引用],在“.Net”选项卡里,选择“System.Management”,单击[确定]

Imports System.Management

Public Class Form1

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Dim MySearcher As New ManagementObjectSearcher("SELECT * FROM Win32_NetworkAdapterConfiguration")

For Each MySearcherObj As ManagementObject In MySearcher.Get

If CBool(MySearcherObj("IPEnabled")) Then

MsgBox(MySearcherObj("IPAddress")(0))

End If

Next

End Sub

End Class

vb.net 获取指定网卡的网络连接状态

.net不能获得【指定】网卡的信息,给个思路,先遍历所有网卡,然后找到你需要的的那个网卡的信息。

如何区分虚拟网卡与物理网卡

若系统中安装了 VMWare 或者某些 VPN 客户端软件,则会出现若干虚拟网卡。它们在形式上与物理网卡几乎没有区别。 ipconfig 将它们与本地物理网卡等同对待。 那如何在如何区分虚拟网卡还是物理网卡呢?

有些人建议使用 MAC 地址中的 "locally administread bit" 来区分。但是事实上不能100%区分,在win2000之后的系统基本是行不通的。

有人用GetAdaptersInfo 可以获得本机所有网卡的信息,然后通过判断是否“pci”开头来区分是否虚拟网卡。 具体代码如下:(以下代码引用别处)

bool IsLocalAdapter ( const char *pAdapterName ) const

...{

BOOL ret_value = FALSE;

#define NET_CARD_KEY "System\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}"

char szDataBuf[MAX_PATH+1];

DWORD dwDataLen = MAX_PATH;

DWORD dwType = REG_SZ;

HKEY hNetKey = NULL;

HKEY hLocalNet = NULL;

if(ERROR_SUCCESS != RegOpenKeyEx(HKEY_LOCAL_MACHINE, NET_CARD_KEY, 0, KEY_READ, hNetKey))

return FALSE;

sprintf(szDataBuf, "%s\Connection", pAdapterName);

if(ERROR_SUCCESS != RegOpenKeyEx(hNetKey ,szDataBuf ,0 ,KEY_READ, hLocalNet))

...{

RegCloseKey(hNetKey);

return FALSE;

}

if (ERROR_SUCCESS != RegQueryValueEx(hLocalNet, "MediaSubType", 0, dwType, (BYTE *)szDataBuf, dwDataLen))

...{

goto ret;

}

if (*((DWORD *)szDataBuf)!=0x01)

goto ret;

dwDataLen = MAX_PATH;

if (ERROR_SUCCESS != RegQueryValueEx(hLocalNet, "PnpInstanceID", 0, dwType, (BYTE *)szDataBuf, dwDataLen))

...{

goto ret;

}

if (strncmp(szDataBuf, "PCI", strlen("PCI")))

goto ret;

ret_value = TRUE;

ret:

RegCloseKey(hLocalNet);

RegCloseKey(hNetKey);

return ret_value!=0;

}

这样方法基本可以达到目标,但是也存在不能识别所有网卡类型。

还有一种更简单,而且可以100%识别的方法,就是通过“Characteristics”这个值来确定网卡的类型是虚拟网卡还是物理网卡。

Characteristics 值在注册表

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002bE10318}\数字下。

在windows中,Characteristics 的取值如下,Characteristics项可以有1个或多个如下的值(多值应计算总和):

十六进制值 名字 描述

ox1 NCF_VIRTUAL 说明组件是个虚拟适配器

ox2 NCF_SOFTWARE_ENUMERATED 说明组件是一个软件模拟的适配器

ox4 NCF_PHYSICAL 说明组件是一个物理适配器

ox8 NCF_HIDDEN 说明组件不显示用户接口

ox10 NCF_NO_SERVICE 说明组件没有相关的服务(设

备驱动程序)

ox20 NCF_NOT_USER_REMOVABLE 说明不能被用户删除(例如,

通过控制面板或设备管理器)

ox40 NCF_MULTIPORT_INSTANCED_ADAPTER 说明组件有多个端口,每个端

口作为单独的设备安装。每个

端口有自己的hw_id(组件ID)

并可被单独安装,这只适合于

EISA适配器

ox80 NCF_HAS_UI 说明组件支持用户接口(例如,

Advanced Page或Customer

Properties Sheet)

ox400 NCF_FILTER 说明组件是一个过滤器

从上面可以看出来,只要用户判断“Characteristics ”的值就可以判断网卡是虚拟网卡还是物理网卡。

如果是虚拟网卡:Characteristics NCF_VIRTUAL ==NCF_VIRTUAL

如果是物理网卡:Characteristics NCF_PHYSICAL ==NCF_PHYSICAL


本文名称:vb.net判断物理网卡 vb获取网卡物理地址
文章转载:http://myzitong.com/article/doohges.html