minor changes for reliablity; trying to get demo to work

This commit is contained in:
JJTech0130 2023-04-07 19:54:19 -04:00
parent 60be3c3cf1
commit 7c18293986
No known key found for this signature in database
GPG key ID: 23C92EBCCF8F93D6
2 changed files with 41 additions and 20 deletions

23
demo.py
View file

@ -4,26 +4,31 @@ from hashlib import sha1
conn1 = apns.APNSConnection() conn1 = apns.APNSConnection()
conn1.connect() conn1.connect()
conn1.keep_alive()
conn1.set_state(0x01)
print(f"Push Token 1: {b64encode(conn1.token).decode()}") print(f"Push Token 1: {b64encode(conn1.token).decode()}")
#while True:
# pass
conn1.filter([]) conn1.filter([])
conn1.connect(False) conn1.connect(False)
print(f"User Token 1: {b64encode(conn1.token).decode()}") print(f"User Token 1: {b64encode(conn1.token).decode()}")
conn2 = apns.APNSConnection() # conn2 = apns.APNSConnection()
conn2.connect() # conn2.connect()
conn2.filter([]) # conn2.filter([])
print(f"Push Token 2: {b64encode(conn2.token).decode()}") # print(f"Push Token 2: {b64encode(conn2.token).decode()}")
conn2.connect(False) # conn2.connect(False)
print(f"User Token 2: {b64encode(conn2.token).decode()}") # print(f"User Token 2: {b64encode(conn2.token).decode()}")
conn1.filter(["com.apple.madrid"]) conn1.filter(["com.apple.madrid"])
conn2.filter(["com.apple.madrid"]) # conn2.filter(["com.apple.madrid"])
conn1.send_message(b"\xe5^\xc0c\xe8\xa4\x1e\xbe\x03\x89'\xea\xd5m\x94\x05\xae\xf5\x1bqK\x1aJTH\xa4\xeb8\xb8<\xd7)", "com.apple.madrid", b'bplist00\xdd\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x13\x17\x18\x19ScdrRtPRgdQiRsPRnrQcQUQtScdvRuaRqHQvM\x08\xd6\xf3\xe6\x8d\x04\x18\x95\xfd\xea\xe9\xf50_\x10\x10tel:+16106632676\t\x12=\x12c&_\x10\x1amailto:jjgill07@icloud.com\x10\x01\x10mO\x10\x10UC>\x9f\xce\xa4N\xe0\xba\xe9\xad\x8e_h\xd7hO\x10 \xe5^\xc0c\xe8\xa4\x1e\xbe\x03\x89\'\xea\xd5m\x94\x05\xae\xf5\x1bqK\x1aJTH\xa4\xeb8\xb8<\xd7)_\x10#[macOS,13.2.1,22D68,MacBookPro18,3]O\x10!\x01\x97\xca\\"\xcaI\x82\x0c\xb66C\xa7\x89h\x91\xcd\x18Ozj"\x06u;9\x96\xebrQs|=\x10\x08\x00\x08\x00#\x00\'\x00*\x00-\x00/\x002\x005\x007\x009\x00;\x00?\x00B\x00E\x00G\x00U\x00h\x00i\x00n\x00\x8b\x00\x8d\x00\x8f\x00\xa2\x00\xc5\x00\xeb\x01\x0f\x00\x00\x00\x00\x00\x00\x02\x01\x00\x00\x00\x00\x00\x00\x00\x1a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x11') conn1.send_message(b"\xe5^\xc0c\xe8\xa4\x1e\xbe\x03\x89'\xea\xd5m\x94\x05\xae\xf5\x1bqK\x1aJTH\xa4\xeb8\xb8<\xd7)", "com.apple.madrid", b'bplist00\xdd\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x13\x17\x18\x19ScdrRtPRgdQiRsPRnrQcQUQtScdvRuaRqHQvM\x08\xd6\xf3\xe6\x8d\x04\x18\x95\xfd\xea\xe9\xf50_\x10\x10tel:+16106632676\t\x12=\x12c&_\x10\x1amailto:jjgill07@icloud.com\x10\x01\x10mO\x10\x10UC>\x9f\xce\xa4N\xe0\xba\xe9\xad\x8e_h\xd7hO\x10 \xe5^\xc0c\xe8\xa4\x1e\xbe\x03\x89\'\xea\xd5m\x94\x05\xae\xf5\x1bqK\x1aJTH\xa4\xeb8\xb8<\xd7)_\x10#[macOS,13.2.1,22D68,MacBookPro18,3]O\x10!\x01\x97\xca\\"\xcaI\x82\x0c\xb66C\xa7\x89h\x91\xcd\x18Ozj"\x06u;9\x96\xebrQs|=\x10\x08\x00\x08\x00#\x00\'\x00*\x00-\x00/\x002\x005\x007\x009\x00;\x00?\x00B\x00E\x00G\x00U\x00h\x00i\x00n\x00\x8b\x00\x8d\x00\x8f\x00\xa2\x00\xc5\x00\xeb\x01\x0f\x00\x00\x00\x00\x00\x00\x02\x01\x00\x00\x00\x00\x00\x00\x00\x1a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x11')
while True: # while True:
print(conn1.expect_message()) # print(conn1.expect_message())
#print(conn2.expect_message()) #print(conn2.expect_message())
#print(conn1.expect_message()) #print(conn1.expect_message())
#print(conn2.expect_message()) #print(conn2.expect_message())

View file

@ -12,8 +12,8 @@ sys.path.append('../')
# APNs server to proxy traffic to # APNs server to proxy traffic to
APNS_HOST = "windows.courier.push.apple.com" APNS_HOST = "windows.courier.push.apple.com"
APNS_PORT = 5223 APNS_PORT = 5223
#ALPN = b"apns-security-v3" ALPN = b"apns-security-v3"
ALPN = b"apns-security-v2" #ALPN = b"apns-security-v2"
#ALPN = b"apns-pack-v1" #ALPN = b"apns-pack-v1"
global_cnt = 0 global_cnt = 0
@ -27,6 +27,7 @@ def connect() -> tlslite.TLSConnection:
#print("Handshaking with APNs") #print("Handshaking with APNs")
# Handshake with the server # Handshake with the server
if ALPN == b"apns-security-v3": if ALPN == b"apns-security-v3":
print("Using v3")
ssock.handshakeClientCert(alpn=[ALPN]) ssock.handshakeClientCert(alpn=[ALPN])
else: else:
import albert import albert
@ -51,8 +52,10 @@ def proxy(conn1: tlslite.TLSConnection, conn2: tlslite.TLSConnection, prefix: st
while True: while True:
# Read data from the first connection # Read data from the first connection
data = conn1.read() data = conn1.read()
#print(prefix, "data: ", data)
# If there is no data, the connection has closed # If there is no data, the connection has closed
if not data: if not data:
print(prefix, "Connection closed due to no data")
break break
override = printer.pretty_print_payload(prefix, apns._deserialize_payload_from_buffer(data)) override = printer.pretty_print_payload(prefix, apns._deserialize_payload_from_buffer(data))
@ -66,9 +69,12 @@ def proxy(conn1: tlslite.TLSConnection, conn2: tlslite.TLSConnection, prefix: st
conn2.write(data) conn2.write(data)
except OSError as e: except OSError as e:
if e.errno == 9: if e.errno == 9:
print(prefix, "Connection closed due to OSError 9")
pass # Probably a connection closed error pass # Probably a connection closed error
except tlslite.TLSAbruptCloseError: else:
pass raise e
except tlslite.TLSAbruptCloseError as e:
print(prefix, "Connection closed abruptly: ", e)
print("Connection closed") print("Connection closed")
# Close the connections # Close the connections
conn1.close() conn1.close()
@ -103,6 +109,8 @@ def serve():
# Create a socket to listen for connections # Create a socket to listen for connections
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# Allow the socket to be reused
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sock.bind(("localhost", 5223)) sock.bind(("localhost", 5223))
sock.listen() sock.listen()
@ -120,14 +128,22 @@ def serve():
global key global key
key = f.read() key = f.read()
conns = []
# Accept connections # Accept connections
try:
while True: while True:
# Accept a connection # Accept a connection
conn, addr = sock.accept() conn, addr = sock.accept()
conns.append(conn)
# Create a thread to handle the connection # Create a thread to handle the connection
#handle(conn) #handle(conn)
thread = threading.Thread(target=handle, args=(conn,)) thread = threading.Thread(target=handle, args=(conn,))
thread.start() thread.start()
except KeyboardInterrupt:
print("Keyboard interrupt, closing sockets")
for conn in conns:
conn.close()
sock.close()
if __name__ == "__main__": if __name__ == "__main__":
serve() serve()