- 论坛徽章:
- 0
|
本帖最后由 chinaunix874 于 2010-06-18 15:43 编辑
按照luffy.deng的提醒,修改了一下代码,主要是修改了计算广播地址的函数,现在看上去简单多了。多谢多谢。
- #!/usr/bin/python
- #FileName: e-wxsubnet.py
- import re
- import wx
- import ctypes
- def ipnum_dec2bin(ipnum):
- result = ''
- num = int(ipnum)
- while num > 0:
- mod = num % 2
- num /= 2
- result = str(mod) + result
- if len(result) != 8:
- result = '0'*(8-len(result)) + result
- return result
- def check_ip(ip):
- return re.match('(([01]?\d\d?|2[0-4]\d|25[0-5])\.){3}([01]?\d\d?|2[0-4]\d|25[0-5])$',ip)
- def check_mask(mask):
- if mask == '0.0.0.0':
- return False
- if check_ip(mask):
- mask = mask.split(".")
- masknum = [int(num) for num in mask]
- maskbin = ''
- for num in masknum:
- maskbin += ipnum_dec2bin(num)
- if '01' in maskbin:
- return False
- else:
- return True
- def get_subnet(ip, mask):
- ip = ip.split('.')
- mask = mask.split('.')
- return [str(int(i) & int(m)) for i, m in map(None, ip, mask)]
- def get_broadcast(ip, mask):
- ip = ip.split('.')
- mask = mask.split('.')
- mask = [ctypes.c_ubyte(~int(i)).value for i in mask]
- return [str(int(i) | int(m)) for i, m in map(None, ip, mask)]
- class MyFrame(wx.Frame):
- def __init__(self):
- wx.Frame.__init__(self, None, -1, 'Subnet Calculator', size=(500, 200))
- panel = wx.Panel(self, -1)
- wx.StaticText(panel, -1, 'IP:', pos=(10, 12))
- self.ipCtrl = wx.TextCtrl(panel, -1, '', pos=(70, 10), size=(300, -1))
- wx.StaticText(panel, -1, 'Netmask:', pos=(10, 42))
- self.maskCtrl = wx.TextCtrl(panel, -1, '', pos=(70, 40), size=(300, -1))
- wx.StaticText(panel, -1, 'Result:', pos=(10, 72))
- self.resCtrl = wx.TextCtrl(panel, -1, '', pos=(70, 70), size=(400, -1))
- button = wx.Button(panel, label='Calculator', pos=(70, 100))
- self.Bind(wx.EVT_BUTTON, self.OnClick, button)
- def OnClick(self, event):
- ipaddr = self.ipCtrl.GetValue()
- mask = self.maskCtrl.GetValue()
- if not check_ip(ipaddr):
- self.resCtrl.SetValue("Please input correct IP address!")
- elif not check_mask(mask):
- self.resCtrl.SetValue("Please input correct Netmask")
- else:
- subnet = '.'.join(get_subnet(ipaddr, mask))
- broadcast = '.'.join(get_broadcast(ipaddr,mask))
- self.resCtrl.SetValue("Subnet is:%s Broadcast is:%s" % (subnet, broadcast))
- if __name__ == '__main__':
- app = wx.PySimpleApp()
- frame = MyFrame()
- frame.Show(True)
- app.MainLoop()
复制代码 |
|