import socket
import xmlrpc.client
import traceback
+import ssl
+
+from gethostbyaddr import workaround_gethostbyaddr
+
class PlcapiUrlScanner:
self.auth = auth
if not hostname and not ip:
raise Exception("PlcapiUrlScanner needs _some_ input")
- if hostname:
- if not ip:
- try:
- ip = socket.gethostbyname(hostname)
- except:
- hostname = "{}.pl.sophia.inria.fr".format(hostname)
- ip = socket.gethostbyname(hostname)
- else:
- hostname=socket.gethostbyaddr(ip)[0]
+ if not hostname:
+ hostname = workaround_gethostbyaddr(ip)
+ elif hostname and not ip:
+ try:
+ ip = socket.gethostbyname(hostname)
+ except:
+ hostname = "{}.pl.sophia.inria.fr".format(hostname)
+ ip = socket.gethostbyname(hostname)
self.hostname = hostname
self.ip = ip
self.verbose = verbose
-
+
def try_url (self, url):
try:
- xmlrpc.client.ServerProxy (url, verbose=self.verbose, allow_none=True).GetNodes(self.auth)
+ proxy = xmlrpc.client.ServerProxy(url, verbose=self.verbose, allow_none=True,
+ context=ssl._create_unverified_context())
+ nodes = proxy.GetNodes(self.auth)
print('YES', url)
return True
except xmlrpc.client.ProtocolError as e: