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

Annotation of /FigKernelPackages/FIG.py

Parent Directory Parent Directory | Revision Log Revision Log


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

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3