⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 networkdevice.py

📁 一个Windows下的Linux专用虚拟机
💻 PY
字号:
import wx, sysfrom common import *class NetworkDevicesOptionArray(OptionArrayPanel):    CLASS_DESC = 'Virtual Network Adapters'    SHORT_TREE_DESC = 'Networking'    def get_item_list(self):        return self.mainframe.network_devices    class Item(ConfigurationItem):                def title(self, long=False):            device = self._xml_item            index = int(device.attr.index)            if long:                name = 'conet%d' % (index, )            else:                name = '[%d]' % (index, )            return '%s: %s' % (name, device.attr.type)    class ItemPanel(OptionArrayPanel.ItemPanel):        types_dict = {            'TAP Win32' : 'tap',            'Bridged Ethernet' : 'bridged',        }        types_dict_rev = dict([(a, b) for b, a in types_dict.items()])                def populate(self, panel_sizer):            sizer = wx.BoxSizer(wx.VERTICAL)                        sizer2 = wx.BoxSizer(wx.HORIZONTAL)            text = wx.StaticText(self.panel, -1, 'Adapter Type: ')            sizer2.Add(text, 0, 0, 3)            current_type = self.types_dict_rev[str(self.item._xml_item.attr.type)]            if sys.platform == 'win32':                style = 0            else:                style = wx.CB_READONLY            comboctrl = wx.ComboBox(self.panel, -1, current_type, style=style)            def type_combo_changed(event):                self.load_adapter_list()                self.changed(event)            wx.EVT_COMBOBOX(comboctrl, -1, type_combo_changed)            wx.EVT_TEXT(comboctrl, -1, type_combo_changed)            [comboctrl.Append(typename) for typename in self.types_dict.keys()]            sizer2.Add(comboctrl, 1, wx.EXPAND, 3)            sizer.Add(sizer2, 0, wx.EXPAND | wx.ALL, 3)            self.type_combo = comboctrl            sizer2 = wx.BoxSizer(wx.HORIZONTAL)            text = wx.StaticText(self.panel, -1, 'Adapter Name: ')            sizer2.Add(text, 0, 0, 3)            comboctrl = wx.ComboBox(self.panel, -1)            wx.EVT_COMBOBOX(comboctrl, -1, self.changed)            wx.EVT_TEXT(comboctrl, -1, self.changed)            sizer2.Add(comboctrl, 1, wx.EXPAND, 3)            sizer.Add(sizer2, 0, wx.EXPAND | wx.ALL, 3)            self.name_combo = comboctrl            self.load_adapter_list(False)            comboctrl.SetValue(str(self.item._xml_item.attr.name))                                    sizer2 = wx.BoxSizer(wx.HORIZONTAL)            text = wx.StaticText(self.panel, -1, 'Index: ')            sizer2.Add(text, 0, 0, 3)            self.index_text = textctrl = wx.TextCtrl(self.panel, -1, self.item._xml_item.attr.index)            wx.EVT_TEXT(textctrl, -1, self.changed)            sizer2.Add(textctrl, 0, 0, 3)            sizer.Add(sizer2, 0, wx.EXPAND | wx.ALL, 3)                        panel_sizer.Add(sizer, 0, wx.EXPAND | wx.ALL)        def load_adapter_list(self, set_name=True):            comboctrl = self.name_combo            comboctrl.Clear()            type = self.types_dict[self.type_combo.GetValue()]            adapter_list = get_adapter_list(type)            [comboctrl.Append(typename) for typename in adapter_list]            if adapter_list and set_name:                comboctrl.SetValue(adapter_list[0])                def apply(self, event=None):            try:                ret_index = self.check_index(self.index_text.GetValue(), self.item._xml_item.attr.index)            except InvalidArrayIndexChosen, e:                wx.MessageDialog(self.panel, e.args[0], style=wx.OK).ShowModal()                return False            self.item._xml_item.attr.index = str(int(self.index_text.GetValue()))            self.item._xml_item.attr.name = str(self.name_combo.GetValue())            self.item._xml_item.attr.type = str(self.types_dict[self.type_combo.GetValue()])            super(NetworkDevicesOptionArray.ItemPanel, self).apply(event)TAPNAME = 'tap0801co'def get_adapter_list(listtype):    if sys.platform != 'win32':        return []    if listtype == 'tap':        return [item for item, itype in win32_get_adapter_list() if itype == TAPNAME]    return [item for item, itype in win32_get_adapter_list() if itype != TAPNAME]def win32_get_adapter_list():    """Get the list of network adapters an their corresponding    network driver identifier."""        from win32api import RegOpenKeyEx, RegEnumKeyEx    from win32api import RegQueryValueEx    from win32con import HKEY_LOCAL_MACHINE    TAPNAME = 'tap08010co'    NET_GUID = "{4D36E972-E325-11CE-BFC1-08002BE10318}"    CONTROL_PATH = "SYSTEM\\CurrentControlSet\\Control\\"    ADAPTER_KEY = CONTROL_PATH + "Class\\" + NET_GUID    NETWORK_CONNECTIONS_KEY = CONTROL_PATH + "Network\\" + NET_GUID    adapters = []    adapter_types = {}    key = RegOpenKeyEx(HKEY_LOCAL_MACHINE, ADAPTER_KEY)    for value in RegEnumKeyEx(key):
        subpath = "\\".join([ADAPTER_KEY, value[0]])        subkey = RegOpenKeyEx(HKEY_LOCAL_MACHINE, subpath)        drivername = RegQueryValueEx(subkey, "ComponentId")        instanceid = RegQueryValueEx(subkey, "NetCfgInstanceId")        adapter_types[instanceid[0]] = drivername[0]            key = RegOpenKeyEx(HKEY_LOCAL_MACHINE, NETWORK_CONNECTIONS_KEY)    for value in RegEnumKeyEx(key):        if value[0].startswith('{'):            subpath = "\\".join([NETWORK_CONNECTIONS_KEY, value[0], "Connection"])            subkey = RegOpenKeyEx(HKEY_LOCAL_MACHINE, subpath)            name = RegQueryValueEx(subkey, "Name")            if value[0] in adapter_types:                adapters.append((name[0], adapter_types[value[0]]))                    return adaptersif __name__ == "__main__":    print get_adapter_list()    pass

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -