1import FrameWork 2import EasyDialogs 3from Carbon import Res 4from Carbon import Dlg 5import socket 6import string 7import macresource 8# 9# Definitions for our resources 10ID_MAIN=512 11ID_ABOUT=513 12 13ITEM_LOOKUP_ENTRY=1 14ITEM_RESULT=2 15ITEM_LOOKUP_BUTTON=3 16 17def main(): 18 macresource.need("DLOG", ID_MAIN, "dnslookup-2.rsrc") 19 DNSLookup() 20 21class DNSLookup(FrameWork.Application): 22 "Application class for DNS Lookup" 23 24 def __init__(self): 25 # First init menus, etc. 26 FrameWork.Application.__init__(self) 27 # Next create our dialog 28 self.main_dialog = MyDialog(self) 29 # Now open the dialog 30 self.main_dialog.open(ID_MAIN) 31 # Finally, go into the event loop 32 self.mainloop() 33 34 def makeusermenus(self): 35 self.filemenu = m = FrameWork.Menu(self.menubar, "File") 36 self.quititem = FrameWork.MenuItem(m, "Quit", "Q", self.quit) 37 38 def quit(self, *args): 39 self._quit() 40 41 def do_about(self, *args): 42 f = Dlg.GetNewDialog(ID_ABOUT, -1) 43 while 1: 44 n = Dlg.ModalDialog(None) 45 if n == 1: 46 return 47 48class MyDialog(FrameWork.DialogWindow): 49 "Main dialog window for DNSLookup" 50 def __init__(self, parent): 51 FrameWork.DialogWindow.__init__(self, parent) 52 self.parent = parent 53 54 def do_itemhit(self, item, event): 55 if item == ITEM_LOOKUP_BUTTON: 56 self.dolookup() 57 58 def dolookup(self): 59 """Get text entered in the lookup entry area. Place result of the 60 call to dnslookup in the result entry area.""" 61 tp, h, rect = self.dlg.GetDialogItem(ITEM_LOOKUP_ENTRY) 62 txt = Dlg.GetDialogItemText(h) 63 64 tp, h, rect = self.dlg.GetDialogItem(ITEM_RESULT) 65 Dlg.SetDialogItemText(h, self.dnslookup(txt)) 66 67 def dnslookup(self, str): 68 """ Perform DNS lookup on str. If first character of digit is numeric, 69 assume that str contains an IP address. Otherwise, assume that str 70 contains a hostname.""" 71 if str == '': str = ' ' 72 if str[0] in string.digits: 73 try: 74 value = socket.gethostbyaddr(str)[0] 75 except: 76 value = 'Lookup failed' 77 else: 78 try: 79 value = socket.gethostbyname(str) 80 except: 81 value = 'Lookup failed' 82 return value 83 84 85main() 86