mirror of
				https://gitea.osmocom.org/cellular-infrastructure/osmo-mgw.git
				synced 2025-11-04 05:53:26 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			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"
 |