forked from srieger/virl-utils-hs-fulda
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
73 lines
2.5 KiB
73 lines
2.5 KiB
#!/usr/bin/env python
|
|
|
|
import sys, time, socket
|
|
from websocket import create_connection, WebSocketTimeoutException
|
|
#websocket._exceptions.WebSocketTimeoutException
|
|
|
|
def checkws(ws,hostname,timeout,debug):
|
|
# create websocket
|
|
ws = create_connection(ws, subprotocols=["binary", "base64"])
|
|
# set timeout
|
|
ws.settimeout(timeout);
|
|
# terminal initialization
|
|
ws.send("\x0d")
|
|
ws.send("\xff\xfd\x01")
|
|
ws.send("\xff\xfb\x03")
|
|
ws.send("\xff\xfb\x18")
|
|
ws.send("\xff\xfb\x1f")
|
|
ws.send("\xff\xfd\x03")
|
|
ws.send("\xff\xfd\x18")
|
|
ws.send("\xff\xfd\x1f")
|
|
ws.send("\xff\xfe\x00")
|
|
ws.send("\xff\xfc\x00")
|
|
# initial receive
|
|
try:
|
|
result = ""
|
|
result += ws.recv()
|
|
except WebSocketTimeoutException:
|
|
print "timeout"
|
|
except socket.error:
|
|
print "socket closed"
|
|
sys.exit(3)
|
|
if debug > 1: print result
|
|
# send three carriage returns
|
|
ws.send("\r\r\r")
|
|
start = time.clock()
|
|
duration = 0
|
|
# receive result
|
|
try:
|
|
result = ""
|
|
while True:
|
|
result += ws.recv()
|
|
if duration == 0 and result.count(hostname) >= 3:
|
|
duration = time.clock() - start
|
|
break
|
|
except WebSocketTimeoutException:
|
|
print "timeout"
|
|
except socket.error:
|
|
print "socket closed"
|
|
sys.exit(3)
|
|
if debug > 1: print result
|
|
ws.close()
|
|
# count occurences of hostname
|
|
if result.count(hostname) >= 3:
|
|
print "%f *sec elapsed*" % duration
|
|
return 0
|
|
else:
|
|
print "UNUSABLE"
|
|
return 2
|
|
|
|
def main():
|
|
if len(sys.argv) <= 4:
|
|
sys.stdout.write(str(sys.argv[0]))
|
|
print ": ws url, hostname, timeout and debug (e.g., \"ws://192.168.76.210:19406/websockify?token=870668d2-8855-4208-9d48-9b1a141271b2\" iosv-1 0.5 0) needed as argument! bailing out"
|
|
return 1
|
|
else:
|
|
ws = str(sys.argv[1]).strip()
|
|
hostname = str(sys.argv[2]).strip()
|
|
timeout = float(sys.argv[3])
|
|
debug = int(sys.argv[4])
|
|
return checkws(ws,hostname,timeout,debug)
|
|
|
|
if __name__ == '__main__':
|
|
sys.exit(main())
|