|
1 import FrameWork |
|
2 import EasyDialogs |
|
3 from Carbon import Res |
|
4 from Carbon import Dlg |
|
5 import socket |
|
6 import string |
|
7 import macresource |
|
8 # |
|
9 # Definitions for our resources |
|
10 ID_MAIN=512 |
|
11 ID_ABOUT=513 |
|
12 |
|
13 ITEM_LOOKUP_ENTRY=1 |
|
14 ITEM_RESULT=2 |
|
15 ITEM_LOOKUP_BUTTON=3 |
|
16 |
|
17 def main(): |
|
18 macresource.need("DLOG", ID_MAIN, "dnslookup-2.rsrc") |
|
19 DNSLookup() |
|
20 |
|
21 class 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 |
|
48 class 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 |
|
85 main() |