]>
Commit | Line | Data |
---|---|---|
a0072e6d AT |
1 | #!/usr/bin/env python |
2 | ||
7a104cc6 AT |
3 | import socket |
4 | import select | |
5 | import sys | |
a0072e6d AT |
6 | |
7 | def ensure(data, offset, value): | |
8 | if (data[offset:offset+len(value)] != value): | |
9 | raise Exception("Mismatch at packet offset {0!s} {1!r} != {2!r}".format(offset,data[offset:offset+len(value)], value)) | |
10 | ||
11 | def main(host, port): | |
12 | s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) | |
13 | ||
50f64e26 | 14 | msg = b"\xaa\x77\x00\x00\x00\x01\x00\x00\x00\x00\x00\x01\x04tkey\x04unit\x04test\x00\x00\xf9\x00\xff\x04tkey\x04unit\x04test\x00\x00\xf9\x00\xff\x00\x00\x00\x00\x00\x22\x03bad\04algo\x00\x00\x00\x30\x39\x00\x00\x30\x39\x00\x03\x00\x00\x00\x04test\x00\x00" |
a0072e6d AT |
15 | |
16 | s.sendto(msg, (host, port)) | |
17 | s.settimeout(2) | |
18 | data, addr = s.recvfrom(512) | |
19 | ||
20 | # make sure the data validates | |
21 | ||
22 | # transaction id | |
23 | ensure(data, 0, msg[0:2]) | |
24 | ||
25 | # has one question, one answer | |
50f64e26 PD |
26 | ensure(data, 4, b"\x00\x01") |
27 | ensure(data, 6, b"\x00\x01") | |
a0072e6d AT |
28 | |
29 | # question is tkey.unit.test ANY TKEY? | |
50f64e26 | 30 | ensure(data, 12, b"\x04tkey\x04unit\x04test\x00\x00\xf9\x00\xff") |
a0072e6d | 31 | # answer is called tkey.unit.test ANY TKEY (compressed it seems) |
50f64e26 | 32 | ensure(data, 32, b"\xc0\x0c\x00\xf9\x00\xff") |
a0072e6d AT |
33 | |
34 | # and then ensure we get an BADALGO or error, at least. | |
35 | if (data[64:66] == "\x00\x00"): | |
36 | raise Exception("At packet offset {0!s}: expected {2!r}, got {1!r}".format(offset,data[offset:offset+len(value)], value)) | |
37 | ||
50f64e26 | 38 | print("Got expected TKEY response\n") |
a0072e6d AT |
39 | |
40 | if (len(sys.argv) < 3): | |
50f64e26 | 41 | print("Usage: tkey.py host port") |
a0072e6d AT |
42 | sys.exit(1) |
43 | ||
44 | if __name__ == '__main__': | |
45 | main(sys.argv[1], int(sys.argv[2])) |