我使用netifaces
模块。
import netifaces
print netifaces.interfaces()
但这显示以下结果:
['{CDC97813-CC28-4260-BA1E-F0CE3081DEC7}',
'{846EE342-7039-11DE-9D20-806E6F6E6963}',
'{A51BA5F0-738B-4405-975F-44E67383513F}',
'{A646FA85-2EC6-4E57-996E-96E1B1C5CD59}',
'{B5DC7787-26DC-4540-8424-A1D5598DC175}']
我想获得一个“友好的”界面名称,例如Windows中的“本地连接”。
我该怎么办?
似乎netifaces
需要我们将信息从Windows注册表中提取出来。在Windows 8.1的Python 3.4下,以下功能对我有用。
要获取连接名称…
import netifaces as ni
import winreg as wr
from pprint import pprint
def get_connection_name_from_guid(iface_guids):
iface_names = ['(unknown)' for i in range(len(iface_guids))]
reg = wr.ConnectRegistry(None, wr.HKEY_LOCAL_MACHINE)
reg_key = wr.OpenKey(reg, r'SYSTEM\CurrentControlSet\Control\Network\{4d36e972-e325-11ce-bfc1-08002be10318}')
for i in range(len(iface_guids)):
try:
reg_subkey = wr.OpenKey(reg_key, iface_guids[i] + r'\Connection')
iface_names[i] = wr.QueryValueEx(reg_subkey, 'Name')[0]
except FileNotFoundError:
pass
return iface_names
x = ni.interfaces()
pprint(get_connection_name_from_guid(x))
..在我的机器上产生:
['Local Area Connection* 12',
'Bluetooth Network Connection',
'Wi-Fi',
'Ethernet',
'VirtualBox Host-Only Network',
'(unknown)',
'isatap.{4E4150B0-643B-42EA-AEEA-A14FBD6B1844}',
'isatap.{BB05D283-4CBF-4514-B76C-7B7EBB2FC85B}']
获取驱动程序名称…
import netifaces as ni
import winreg as wr
from pprint import pprint
def get_driver_name_from_guid(iface_guids):
iface_names = ['(unknown)' for i in range(len(iface_guids))]
reg = wr.ConnectRegistry(None, wr.HKEY_LOCAL_MACHINE)
reg_key = wr.OpenKey(reg, r'SYSTEM\CurrentControlSet\Control\Class\{4d36e972-e325-11ce-bfc1-08002be10318}')
for i in range(wr.QueryInfoKey(reg_key)[0]):
subkey_name = wr.EnumKey(reg_key, i)
try:
reg_subkey = wr.OpenKey(reg_key, subkey_name)
guid = wr.QueryValueEx(reg_subkey, 'NetCfgInstanceId')[0]
try:
idx = iface_guids.index(guid)
iface_names[idx] = wr.QueryValueEx(reg_subkey, 'DriverDesc')[0]
except ValueError:
pass
except PermissionError:
pass
return iface_names
x = ni.interfaces()
pprint(get_driver_name_from_guid(x))
…这给了我:
['Microsoft Wi-Fi Direct Virtual Adapter',
'Bluetooth Device (Personal Area Network)',
'Dell Wireless 1395 WLAN Mini-Card',
'Broadcom 440x 10/100 Integrated Controller',
'VirtualBox Host-Only Ethernet Adapter',
'(unknown)',
'Microsoft ISATAP Adapter',
'Microsoft ISATAP Adapter']
问题内容: 我需要收集所有接口名称,即使是目前还没有使用的接口名称。喜欢。 多次遍历同一接口名称。如何使用一次收集所有接口名称? 问题答案: 您可以检查getifaddrs中的哪些条目属于AF_PACKET系列。在我的系统上,似乎列出了所有接口:
当我运行Quarkus应用程序时,它默认只侦听/绑定本地主机。 我如何改变这种行为?
问题内容: 在C#中,我们有和有或没有命名空间(包在Java世界中)得到一个类型(类在这种情况下)的名称。 java等于什么? 显然,有比手动使用和删除软件包名称更好的方法。 问题答案: 返回源代码中给定的基础类的简单名称。如果基础类是匿名的,则返回一个空字符串。 数组的简单名称是组件类型的简单名称,后接“ []”。特别是其组件类型为匿名的数组的简单名称为“ []”。 它实际上是从名称中删除软件包
问题内容: 看来android的java.net.NetworkInterface实现没有 byte [] getHardwareAddress()方法 http://developer.android.com/reference/java/net/NetworkInterface.html 我发现有几个论坛的人都试图这样做,但没有明确的答案,我需要获得一个跨设备的UUID,所以我不能依赖电话号码
问题内容: 上面的示例显示了具有多个名称空间的XML文件的示例。这些名称空间的目的是什么,最重要的是,即使没有Internet连接,它们为什么也可以工作? 我认为从第二位开始包含XML模式文件,这些文件用于验证XML文档的结构。如果我在不在网络上的计算机上运行使用此配置文件的应用程序,这些仍然如何工作?URL是JAR文件的别名吗? 问题答案: 让我们假设我们有这个XML文档。 它包括HTML,该H
问题内容: 我有一个测试用例,需要根据浏览器名称(即IE或Chrome)执行。在此测试用例中,某些部分将取决于浏览器类型。 如何在两次执行之间获取浏览器名称?例如,如果是IE,则需要传递数据。如果是Chrome浏览器,则需要选择数据。 问题答案: 您可以使用以下代码来了解浏览器名称,版本和操作系统详细信息:- 您需要导入的软件包 希望它能对您有所帮助:)