diff --git a/tplink_smartplug.py b/tplink_smartplug.py index ba0ecef..981531f 100755 --- a/tplink_smartplug.py +++ b/tplink_smartplug.py @@ -19,6 +19,7 @@ # limitations under the License. # +import sys import socket import argparse from struct import pack @@ -66,23 +67,45 @@ commands = { 'info' : '{"system":{"get_sysinfo":{}}}', # Encryption and Decryption of TP-Link Smart Home Protocol # XOR Autokey Cipher with starting key = 171 -def encrypt(string): - key = 171 - result = pack('>I', len(string)) - for i in string: - a = key ^ ord(i) - key = a - result += chr(a) - return result +# Python 3.x Version +if sys.version_info[0] > 2: + def encrypt(string): + key = 171 + result = pack('>I', len(string)) + for i in string: + a = key ^ ord(i) + key = a + result += bytes([a]) + return result -def decrypt(string): - key = 171 - result = "" - for i in string: - a = key ^ ord(i) - key = ord(i) - result += chr(a) - return result + def decrypt(string): + key = 171 + result = "" + for i in string: + a = key ^ i + key = i + result += chr(a) + return result + +# Python 2.x Version +else: + def encrypt(string): + key = 171 + result = pack('>I', len(string)) + for i in string: + a = key ^ ord(i) + key = a + result += chr(a) + return result + + def decrypt(string): + key = 171 + result = "" + for i in string: + a = key ^ ord(i) + key = ord(i) + result += chr(a) + return result # Parse commandline arguments parser = argparse.ArgumentParser(description="TP-Link Wi-Fi Smart Plug Client v" + str(version)) @@ -123,4 +146,3 @@ try: except socket.error: quit("Cound not connect to host " + ip + ":" + str(port)) -