59 lines
1.4 KiB
Python
Executable File
59 lines
1.4 KiB
Python
Executable File
#!/usr/bin/env python
|
|
|
|
"""
|
|
demonstrate a unblock bug on the GB Proxy..
|
|
"""
|
|
|
|
bts_ns_reset = "\x02\x00\x81\x01\x01\x82\x1f\xe7\x04\x82\x1f\xe7"
|
|
ns_reset_ack = "\x03\x01\x82\x1f\xe7\x04\x82\x1f\xe7"
|
|
|
|
bts_ns_unblock = "\x06"
|
|
ns_unblock_ack = "\x07"
|
|
|
|
bts_bvc_reset_0 = "\x00\x00\x00\x00\x22\x04\x82\x00\x00\x07\x81\x03\x3b\x81\x02"
|
|
ns_bvc_reset_0_ack = "\x00\x00\x00\x00\x23\x04\x82\x00\x00"
|
|
|
|
bts_bvc_reset_8167 = "\x00\x00\x00\x00\x22\x04\x82\x1f\xe7\x07\x81\x08\x08\x88\x72\xf4\x80\x10\x1c\x00\x9c\x40"
|
|
|
|
|
|
import socket
|
|
socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
|
socket.bind(("0.0.0.0", 0))
|
|
socket.setblocking(1)
|
|
|
|
|
|
import sys
|
|
port = int(sys.argv[1])
|
|
print "Sending data to port: %d" % port
|
|
|
|
def send_and_receive(packet):
|
|
socket.sendto(packet, ("127.0.0.1", port))
|
|
|
|
try:
|
|
data, addr = socket.recvfrom(4096)
|
|
except socket.error, e:
|
|
print "ERROR", e
|
|
import sys
|
|
sys.exit(0)
|
|
return data
|
|
|
|
#send stuff once
|
|
|
|
to_send = [
|
|
(bts_ns_reset, ns_reset_ack, "reset ack"),
|
|
(bts_ns_unblock, ns_unblock_ack, "unblock ack"),
|
|
(bts_bvc_reset_0, ns_bvc_reset_0_ack, "BVCI=0 reset ack"),
|
|
]
|
|
|
|
|
|
for (out, inp, type) in to_send:
|
|
res = send_and_receive(out)
|
|
if res != inp:
|
|
print "Failed to get the %s" % type
|
|
sys.exit(-1)
|
|
|
|
import time
|
|
time.sleep(3)
|
|
res = send_and_receive(bts_bvc_reset_8167)
|
|
print "Sent all messages... check wireshark for the last response"
|