osmo-msc/openbsc/contrib/gb-proxy-unblock-bug.py

60 lines
1.5 KiB
Python
Raw Normal View History

#!/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"