[Bio] / FigKernelPackages / FIG.py Repository:
ViewVC logotype

Annotation of /FigKernelPackages/FIG.py

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.2 - (view) (download) (as text)

1 : olson 1.1 import urlparse
2 :     import socket
3 :     import os
4 :     import sys
5 :     import re
6 :     import FIG_Config
7 :    
8 :     def get_local_hostname():
9 :     #
10 :     # First check to see if we our hostname is correct.
11 :     #
12 :     # Map it to an IP address, and try to bind to that ip.
13 :     #
14 :    
15 :     hostname = socket.getfqdn()
16 :     #
17 :     # First check that hostname is a fqdn, and that we can bind to it.
18 :     #
19 :    
20 :     if hostname.find('.') >= 0:
21 :     if try_bind(hostname):
22 :     return hostname
23 :    
24 :     #
25 :     # Otherwise, do a hostname lookup and try to bind to the IP address.
26 :     #
27 :    
28 :     try:
29 :     ip = socket.gethostbyname(hostname)
30 :    
31 :     except socket.error:
32 :     return get_hostname_by_adapter()
33 :    
34 :     if not try_bind(ip):
35 :    
36 :     return get_hostname_by_adapter()
37 :    
38 :     #
39 :     # It worked. Reverse-map back to a hopefully fqdn.
40 :     #
41 :    
42 :     try:
43 :     rev = socket.gethostbyaddr(ip)
44 :    
45 :     except socket.error:
46 :    
47 :     #
48 :     # Failed, return bare IP address.
49 :     #
50 :    
51 :     return ip
52 :    
53 :     host = rev[0]
54 :     #
55 :     # Check to see if we have a FQDN.
56 :     #
57 :     if host.find(".") >= 0:
58 :     return host
59 :     else:
60 :     return ip
61 :    
62 :     def try_bind(host):
63 :     sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
64 :     try:
65 :     sock.bind((host, 0))
66 :     return 1
67 :     except socket.error:
68 :     return 0
69 :    
70 :     def get_hostname_by_adapter():
71 :     #
72 :     # Attempt to determine our local hostname based on the
73 :     # network environment.
74 :     #
75 :     # This implementation reads the routing table for the default route.
76 :     # We then look at the interface config for the interface that holds the default.
77 :     #
78 :     #
79 :     # Linux routing table:
80 :     # [olson@yips 0.0.0]$ netstat -rn
81 :     # Kernel IP routing table
82 :     # Destination Gateway Genmask Flags MSS Window irtt Iface
83 :     # 140.221.34.32 0.0.0.0 255.255.255.224 U 0 0 0 eth0
84 :     # 169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0
85 :     # 127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo
86 :     # 0.0.0.0 140.221.34.61 0.0.0.0 UG 0 0 0 eth0
87 :     #
88 :     # Mac routing table:
89 :     #
90 :     # bash-2.05a$ netstat -rn
91 :     # Routing tables
92 :     #
93 :     # Internet:
94 :     # Destination Gateway Flags Refs Use Netif Expire
95 :     # default 140.221.11.253 UGSc 12 120 en0
96 :     # 127.0.0.1 127.0.0.1 UH 16 8415486 lo0
97 :     # 140.221.8/22 link#4 UCS 12 0 en0
98 :     # 140.221.8.78 0:6:5b:f:51:c4 UHLW 0 183 en0 408
99 :     # 140.221.8.191 0:3:93:84:ab:e8 UHLW 0 92 en0 622
100 :     # 140.221.8.198 0:e0:98:8e:36:e2 UHLW 0 5 en0 691
101 :     # 140.221.9.6 0:6:5b:f:51:d6 UHLW 1 63 en0 1197
102 :     # 140.221.10.135 0:d0:59:34:26:34 UHLW 2 2134 en0 1199
103 :     # 140.221.10.152 0:30:1b:b0:ec:dd UHLW 1 137 en0 1122
104 :     # 140.221.10.153 127.0.0.1 UHS 0 0 lo0
105 :     # 140.221.11.37 0:9:6b:53:4e:4b UHLW 1 624 en0 1136
106 :     # 140.221.11.103 0:30:48:22:59:e6 UHLW 3 973 en0 1016
107 :     # 140.221.11.224 0:a:95:6f:7:10 UHLW 1 1 en0 605
108 :     # 140.221.11.237 0:1:30:b8:80:c0 UHLW 0 0 en0 1158
109 :     # 140.221.11.250 0:1:30:3:1:0 UHLW 0 0 en0 1141
110 :     # 140.221.11.253 0:d0:3:e:70:a UHLW 13 0 en0 1199
111 :     # 169.254 link#4 UCS 0 0 en0
112 :     #
113 :     # Internet6:
114 :     # Destination Gateway Flags Netif Expire
115 :     # UH lo0
116 :     # fe80::%lo0/64 Uc lo0
117 :     # link#1 UHL lo0
118 :     # fe80::%en0/64 link#4 UC en0
119 :     # 0:a:95:a8:26:68 UHL lo0
120 :     # ff01::/32 U lo0
121 :     # ff02::%lo0/32 UC lo0
122 :     # ff02::%en0/32 link#4 UC en0
123 :    
124 :     try:
125 :     fh = os.popen("netstat -rn", "r")
126 :     except:
127 :     return "localhost"
128 :    
129 :     interface_name = None
130 :     for l in fh:
131 :     cols = l.strip().split()
132 :    
133 : olson 1.2 if len(cols) > 0 and (cols[0] == "default" or cols[0] == "0.0.0.0"):
134 : olson 1.1 interface_name = cols[-1]
135 :     break
136 :    
137 :     fh.close()
138 :    
139 : olson 1.2 # print "Default route on ", interface_name
140 : olson 1.1
141 :     #
142 :     # Find ifconfig.
143 :     #
144 :    
145 :     ifconfig = None
146 :    
147 :     path = os.environ["PATH"].split(":")
148 :     path.extend(["/sbin", "/usr/sbin"])
149 :     for p in path:
150 :     i = os.path.join(p, "ifconfig")
151 :     if os.access(i, os.X_OK):
152 :     ifconfig = i
153 :     break
154 :    
155 :     if ifconfig is None:
156 :     print >> sys.stderr, "Ifconfig not found"
157 :     return "localhost"
158 :    
159 : olson 1.2 # print >> sys.stderr, "found ifconfig ", ifconfig
160 : olson 1.1
161 :     try:
162 :     fh = os.popen(ifconfig+ " " + interface_name, "r")
163 :     except:
164 :     print >> sys.stderr, "Could not run ", ifconfig
165 :     return "localhost"
166 :    
167 :     ip = None
168 :    
169 :     linux_re = re.compile("inet\s+addr:(\d+\.\d+\.\d+\.\d+)\s+")
170 :     mac_re = re.compile("inet\s+(\d+\.\d+\.\d+\.\d+)\s+")
171 :    
172 :     for l in fh:
173 :     #
174 :     # Mac:
175 :     # inet 140.221.10.153 netmask 0xfffffc00 broadcast 140.221.11.255
176 :     # Linux:
177 :     # inet addr:140.221.34.37 Bcast:140.221.34.63 Mask:255.255.255.224
178 :     #
179 :    
180 :     l = l.strip()
181 :    
182 :     m = linux_re.search(l)
183 :     if m:
184 :     #
185 :     # Linux hit.
186 :     #
187 :     ip = m.group(1)
188 :     break
189 :    
190 :     m = mac_re.search(l)
191 :    
192 :     if m:
193 :     #
194 :     # Mac hit.
195 :     #
196 :     ip = m.group(1)
197 :     break
198 :     fh.close()
199 :    
200 :     if ip is None:
201 :     print >> sys.stderr, "Didn't find an IP"
202 :     return "localhost"
203 :    
204 :     return ip
205 :    
206 :     def cgi_url():
207 :     return plug_url(FIG_Config.cgi_url)
208 :    
209 :     def temp_url():
210 :     return plug_url(FIG_Config.temp_url)
211 :    
212 :     def plug_url(url):
213 :    
214 :     name = get_local_hostname()
215 :    
216 :     if not name:
217 :     return url
218 :    
219 :     p = urlparse.urlparse(url)
220 :    
221 :     p = list(p)
222 :    
223 :     p[1] = name
224 :    
225 :     new_url = urlparse.urlunparse(p)
226 :     return new_url
227 :    
228 :     if __name__ == "__main__":
229 :    
230 :     print get_local_hostname()
231 :     print cgi_url()
232 :     print temp_url()

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3