Foxtable(狐表)用户栏目专家坐堂 → 如何获取网卡的物理地址


  共有2481人关注过本帖树形打印复制链接

主题:如何获取网卡的物理地址

帅哥哟,离线,有人找我吗?
teng0731
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:459 积分:3471 威望:0 精华:0 注册:2011/6/6 11:22:00
如何获取网卡的物理地址  发帖心情 Post By:2021/9/17 11:01:00 [只看该作者]

通过下面的语句可以得到一个字符串,想要从字符串中获取本机电脑的所有网卡的物理地址(也就是mac地址)
Dim p As new Process()
p.StartInfo.FileName = "cmd.exe"
p.StartInfo.UseShellExecute = False '关闭Shell的使用
p.StartInfo.RedirectStandardInput = True '重定向标准输入
p.StartInfo.RedirectStandardOutput = True '重定向标准输出
p.StartInfo.RedirectStandardError = True '重定向错误输出
p.StartInfo.CreateNoWindow = True '设置不显示窗口
p.Start()
p.StandardInput.WriteLine("ipconfig/all")
p.StandardInput.WriteLine("exit")
Dim strRst As String = p.StandardOutput.ReadToEnd()
output.show(strRst)

上面的strRst会得到很多信息,现在需要将里面的物理地址单独提取出来,用“;”分号来做分隔符号的一个组合字符串

 回到顶部
帅哥,在线噢!
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106112 积分:539671 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/9/17 11:11:00 [只看该作者]

http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=50305&authorid=0&page=0&star=2

 回到顶部
帅哥哟,离线,有人找我吗?
teng0731
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:459 积分:3471 威望:0 精华:0 注册:2011/6/6 11:22:00
  发帖心情 Post By:2021/9/17 12:15:00 [只看该作者]

目前主要卡在正则表达式的编写上面,无法匹配到相应的行上面,比如用这个语句:
Dim p As new Process()
p.StartInfo.FileName = "cmd.exe"
p.StartInfo.UseShellExecute = False '关闭Shell的使用
p.StartInfo.RedirectStandardInput = True '重定向标准输入
p.StartInfo.RedirectStandardOutput = True '重定向标准输出
p.StartInfo.RedirectStandardError = True '重定向错误输出
p.StartInfo.CreateNoWindow = True '设置不显示窗口
p.Start()
p.StandardInput.WriteLine("ipconfig/all")
p.StandardInput.WriteLine("exit")
Dim strRst As String = p.StandardOutput.ReadToEnd()
output.show(strRst)

可以得到下面的结果:
========================================================
Microsoft Windows [版本 10.0.18363.836]
(c) 2019 Microsoft Corporation。保留所有权利。

C:\foxtable\Development>ipconfig/all

Windows IP 配置

   主机名  . . . . . . . . . . . . . : DESKTOP-5CIA55H
   主 DNS 后缀 . . . . . . . . . . . : 
   节点类型  . . . . . . . . . . . . : 混合
   IP 路由已启用 . . . . . . . . . . : 否
   WINS 代理已启用 . . . . . . . . . : 否

以太网适配器 以太网:

   连接特定的 DNS 后缀 . . . . . . . : 
   描述. . . . . . . . . . . . . . . : Intel(R) Ethernet Connection (7) I219-LM
   物理地址. . . . . . . . . . . . . : 00-A8-61-BF-2H-40
   DHCP 已启用 . . . . . . . . . . . : 否
   自动配置已启用. . . . . . . . . . : 是
   本地链接 IPv6 地址. . . . . . . . : fe82::943b:fab6:ba1b:827d%11(首选) 
   IPv4 地址 . . . . . . . . . . . . : 121.159.4.162(首选) 
   子网掩码  . . . . . . . . . . . . : 255.255.255.128
   默认网关. . . . . . . . . . . . . : 121.159.4.254
   DHCPv6 IAID . . . . . . . . . . . : 100718689
   DHCPv6 客户端 DUID  . . . . . . . : 00-01-00-01-25-F0-1A-68-00-D8-61-EF-2C-40
   DNS 服务器  . . . . . . . . . . . : 121.154.142.28
                                       121.154.142.29
   TCPIP 上的 NetBIOS  . . . . . . . : 已启用

以太网适配器 以太网 2:

   连接特定的 DNS 后缀 . . . . . . . : 
   描述. . . . . . . . . . . . . . . : Virtual Secure Domain Adapter V2
   物理地址. . . . . . . . . . . . . : 00-FN-KK-E7-SD-29
   DHCP 已启用 . . . . . . . . . . . : 是
   自动配置已启用. . . . . . . . . . : 是
   IPv4 地址 . . . . . . . . . . . . : 151.162.36.19(首选) 
   子网掩码  . . . . . . . . . . . . : 255.255.252.0
   获得租约的时间  . . . . . . . . . : 2021年9月17日 7:55:55
   租约过期的时间  . . . . . . . . . : 2022年9月17日 7:55:55
   默认网关. . . . . . . . . . . . . : 
   DHCP 服务器 . . . . . . . . . . . : 151.162.36.0
   TCPIP 上的 NetBIOS  . . . . . . . : 已启用

C:\foxtable\Development>exit

=========对于上面的结果,用正则表达式,如果取到
  物理地址. . . . . . . . . . . . . : 00-A8-61-BF-2H-40
  物理地址. . . . . . . . . . . . . : 00-FN-KK-E7-SD-29
这两行记录所对应的mac地址,修改为下面的完整语句,还是取不到数据:
Dim p As new Process()
p.StartInfo.FileName = "cmd.exe"
p.StartInfo.UseShellExecute = False '关闭Shell的使用
p.StartInfo.RedirectStandardInput = True '重定向标准输入
p.StartInfo.RedirectStandardOutput = True '重定向标准输出
p.StartInfo.RedirectStandardError = True '重定向错误输出
p.StartInfo.CreateNoWindow = True '设置不显示窗口
p.Start()
p.StandardInput.WriteLine("ipconfig/all")
p.StandardInput.WriteLine("exit")
Dim strRst As String = p.StandardOutput.ReadToEnd()
Dim mc = System.Text.RegularExpressions.Regex.Matches(strRst, "  物理地址. . . . . . . . . . . . . :[a-z0-9]{2}-[a-z0-9]{2}-[a-z0-9]{2}-[a-z0-9]{2}-[a-z0-9]{2}-[a-z0-9]{2}")
For i As Integer = 0 To mc.count -1
    Dim v = mc(i).value
    If v.contains("  物理地址. . . . . . . . . . . . . :") Then
        output.show(v.replace("  物理地址. . . . . . . . . . . . . :","").trim())
    End If
Next
这一段如何进行修改?


 回到顶部
帅哥,在线噢!
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106112 积分:539671 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/9/17 12:25:00 [只看该作者]

Dim mc = System.Text.RegularExpressions.Regex.Matches(strRst, "   物理地址. . . . . . . . . . . . . : [a-zA-Z0-9]{2}-[a-zA-Z0-9]{2}-[a-zA-Z0-9]{2}-[a-zA-Z0-9]{2}-[a-zA-Z0-9]{2}-[a-zA-Z0-9]{2}")

 回到顶部
帅哥哟,离线,有人找我吗?
teng0731
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:459 积分:3471 威望:0 精华:0 注册:2011/6/6 11:22:00
  发帖心情 Post By:2021/9/17 12:32:00 [只看该作者]

Dim p As new Process()
p.StartInfo.FileName = "cmd.exe"
p.StartInfo.UseShellExecute = False '关闭Shell的使用
p.StartInfo.RedirectStandardInput = True '重定向标准输入
p.StartInfo.RedirectStandardOutput = True '重定向标准输出
p.StartInfo.RedirectStandardError = True '重定向错误输出
p.StartInfo.CreateNoWindow = True '设置不显示窗口
p.Start()
p.StandardInput.WriteLine("ipconfig/all")
p.StandardInput.WriteLine("exit")
Dim strRst As String = p.StandardOutput.ReadToEnd()
Dim mc = System.Text.RegularExpressions.Regex.Matches(strRst, "   物理地址. . . . . . . . . . . . . : [a-zA-Z0-9]{2}-[a-zA-Z0-9]{2}-[a-zA-Z0-9]{2}-[a-zA-Z0-9]{2}-[a-zA-Z0-9]{2}-[a-zA-Z0-9]{2}")
For i As Integer = 0 To mc.count -1
    Dim v = mc(i).value
    If v.contains("  物理地址. . . . . . . . . . . . . :") Then
        output.show(v.replace("  物理地址. . . . . . . . . . . . . :","").trim())
    End If
Next

=============================================================
上面确实可以了,能够取到数据,还问一下:
正则表达式中的"   物理地址. . . . . . . . . . . . . :     这一段能否简化一下,因为不确定不同版本的windows操作系统会不会不一样或者多一个.,或者少一个.等情况
[此贴子已经被作者于2021/9/17 12:49:16编辑过]

 回到顶部
帅哥,在线噢!
有点蓝
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106112 积分:539671 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/9/17 13:30:00 [只看该作者]

简化不了。碰到这种情况再说

 回到顶部
帅哥哟,离线,有人找我吗?
z769036165
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:752 积分:5363 威望:0 精华:0 注册:2012/10/5 21:53:00
  发帖心情 Post By:2021/9/18 8:09:00 [只看该作者]

Dim nics() As System.Net.NetworkInformation.NetworkInterface = System.Net.NetworkInformation.NetworkInterface.GetAllNetworkInterfaces

Output.Show(nics(0).GetPhysicalAddress.Tostring)

 回到顶部
帅哥哟,离线,有人找我吗?
teng0731
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:459 积分:3471 威望:0 精华:0 注册:2011/6/6 11:22:00
  发帖心情 Post By:2021/9/18 11:49:00 [只看该作者]

感谢 有点蓝老师和z769036165 ,谢谢!

Dim nics() As System.Net.NetworkInformation.NetworkInterface = System.Net.NetworkInformation.NetworkInterface.GetAllNetworkInterfaces
For i As Integer = 0 To nics.count -1
Output.Show(nics(i).GetPhysicalAddress.Tostring)
Next

==================这种方法更好一点,代码更少
[此贴子已经被作者于2021/9/18 12:07:08编辑过]

 回到顶部