fstream/client.py

115 lines
2.3 KiB
Python
Raw Normal View History

#!/usr/bin/env python3
import sys
oldexcepthook = sys.excepthook
def newexcepthook(type,value,traceback):
oldexcepthook(type,value,traceback)
#input("Press ENTER to quit.")
sys.excepthook = newexcepthook
import os
p = os.path.join
pUp = os.path.dirname
s = False
if getattr(sys, 'frozen', False) and hasattr(sys, '_MEIPASS'):
s = os.path.realpath(sys.executable)
else:
s = os.path.realpath(__file__)
sp = pUp(s)
# script start
2021-04-13 18:33:16 +00:00
import subprocess
import socket
2021-04-21 11:16:28 +00:00
def eprint(*args, **kwargs): print(*args, file=sys.stderr, **kwargs)
2021-12-15 20:24:35 +00:00
bufferSize = 8096 # buffer size in bytes
2021-04-14 16:52:18 +00:00
timeout = 15 # timeout in seconds
2021-04-13 18:33:16 +00:00
connection = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
2021-04-14 20:03:53 +00:00
def listToCommand(lst):
cmd = ""
for arg in lst:
arg = arg.replace("\\","\\\\")
arg = arg.replace(",","\\,")
cmd += arg + ","
return cmd[:-1]
2021-12-15 20:24:35 +00:00
def commandToList(cmd):
args = []
cArg = ""
escape = False
for letter in cmd:
if escape == True:
cArg += letter
escape = False
continue
if letter == "\\":
escape = True
continue
if letter == ",":
if cArg == "": continue
args.append(cArg)
cArg = ""
continue
cArg += letter
args.append(cArg)
return args
def makePayload(lst):
cmdText = listToCommand(lst)
cmdBytes = cmdText.encode("utf-8")
2021-12-15 20:24:35 +00:00
cmdBytes += b" " * (1024 - len(cmdBytes))
return cmdBytes
2021-04-21 12:02:39 +00:00
def stringToAddressTuple(addr):
rtn = addr.rsplit(":",1)
rtn[1] = int(rtn[1])
rtn = tuple(rtn)
return rtn
def main():
2021-04-14 15:23:36 +00:00
global serverAddr
2021-04-21 12:02:39 +00:00
serverAddr = stringToAddressTuple(sys.argv[1])
2021-12-15 20:24:35 +00:00
global bufferSize
2021-04-21 12:02:39 +00:00
2021-04-21 11:16:28 +00:00
eprint("Connecting to server...")
2021-04-14 16:52:18 +00:00
connection.settimeout(timeout)
connection.connect(serverAddr)
2021-04-21 11:16:28 +00:00
eprint("Sending payload...")
2021-04-14 15:23:36 +00:00
connection.sendall(makePayload(sys.argv[2:]))
2021-12-15 20:24:35 +00:00
eprint("Receiving payload...")
args = commandToList(connection.recv(1024).decode("utf-8").rstrip(" "))
2021-04-14 15:23:36 +00:00
if sys.argv[2] == "watch":
2021-12-15 20:24:35 +00:00
bufferSize = int(args[0])
2021-04-14 20:03:53 +00:00
try:
2021-04-21 11:16:28 +00:00
eprint("Receiving data...")
2021-04-14 20:03:53 +00:00
while True:
data = connection.recv(bufferSize)
if data == b"": return
2021-12-15 20:24:35 +00:00
sys.stdout.buffer.write(data)
2021-04-14 20:03:53 +00:00
except:
connection.close()
raise
2021-04-14 15:23:36 +00:00
if sys.argv[2] == "broadcast":
2021-12-15 20:24:35 +00:00
bufferSize = int(sys.argv[3])
2021-04-14 20:03:53 +00:00
try:
2021-04-21 11:16:28 +00:00
eprint("Sending data...")
2021-04-14 20:03:53 +00:00
while True:
data = sys.stdin.buffer.read(bufferSize)
2021-12-15 20:24:35 +00:00
connection.sendall(data)
2021-04-14 20:03:53 +00:00
except:
connection.close()
raise
2021-04-13 18:33:16 +00:00
if __name__ == '__main__':
main()