60 lines
1.5 KiB
Python
60 lines
1.5 KiB
Python
|
#!/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)
|
||
|
|
||
|
def send_and_receive(packet, port):
|
||
|
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
|
||
|
import sys
|
||
|
port = int(sys.argv[1])
|
||
|
print "Sending data to port: %d" % port
|
||
|
|
||
|
|
||
|
res = send_and_receive(bts_ns_reset, port)
|
||
|
if res != ns_reset_ack:
|
||
|
print "Failed to get the reset ack"
|
||
|
sys.exit(-1)
|
||
|
|
||
|
res = send_and_receive(bts_ns_unblock, port)
|
||
|
if res != ns_unblock_ack:
|
||
|
print "Failed to get the unblock ack"
|
||
|
sys.exit(-1)
|
||
|
|
||
|
res = send_and_receive(bts_bvc_reset_0, port)
|
||
|
if res != ns_bvc_reset_0_ack:
|
||
|
print "Failed to get NS BVCI=0 reset ack"
|
||
|
sys.exit(-1)
|
||
|
|
||
|
import time
|
||
|
time.sleep(3)
|
||
|
res = send_and_receive(bts_bvc_reset_8167, port)
|
||
|
print "Send all messages... check wireshark for the last response"
|