gsmtap.py: Ported from scapy to socket

With the python module scapy the headers of each layer have to be created
by hand. Furthermore, in order to use it, the program would have to be
started as root.

Using sockets would be the better. The reason for using scapy was, that
it was the first best thing that I found when searching for python
socket communication.
The next step would be to open and close the socket only once instead
of every time an APDU is send to wireshark.
Furthermore, the ATR probably has to be treated differently from APDU packets.
This commit is contained in:
Christina Quast
2015-05-14 17:14:34 +02:00
parent 59dae92398
commit 152e878bfe

20
usb_application/gsmtap.py Normal file → Executable file
View File

@@ -1,6 +1,7 @@
#!/usr/bin/env python #!/usr/bin/env python
from scapy.all import IP, UDP, sr1 import socket
import array
ip="127.0.0.1" ip="127.0.0.1"
port=4729 port=4729
@@ -10,19 +11,14 @@ gsmtap_hdr="\x02\x04\x04"+"\x00"*13
# FIXME: Is ATR something special? # FIXME: Is ATR something special?
def gsmtap_send_apdu(data): def gsmtap_send_apdu(data):
# Do we have performance penalty because the socket stays open? s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
p=IP(dst=ip, src=ip)/UDP(sport=sp, dport=port)/(gsmtap_hdr+data) s.connect((ip, port))
# FIXME: remove show and ans s.send(gsmtap_hdr+data.tostring())
if p: s.close()
p.show()
ans = sr1(p, timeout=2)
if ans:
print(ans)
if __name__ == '__main__': if __name__ == '__main__':
cmds = ("\xa0\xa4\x00\x00\x02\x6f\x7e\x9f\x0f", cmds = ("\xa0\xa4\x00\x00\x02\x6f\x7e\x9f\x0f",
"\xa0\xd6\x00\x00\x0b\xff\xff\xff\xff\x09\xf1\x07\xff\xfe\x00\x03\x90\x00", "\xa0\xd6\x00\x00\x0b\xff\xff\xff\xff\x09\xf1\x07\xff\xfe\x00\x03\x90\x00",
); )
for cmd in cmds: for cmd in cmds:
gsmtap_send_apdu(cmd) gsmtap_send_apdu(array.array('B', cmd))