Commit | Line | Data |
---|---|---|
b0cfbfce IJ |
1 | # -*- python -*- |
2 | ||
3 | import hippotit.slip as slip | |
4 | ||
5 | import ipaddress | |
6 | from ipaddress import AddressValueError | |
7 | ||
8 | #---------- packet parsing ---------- | |
9 | ||
10 | def packet_addrs(packet): | |
11 | version = packet[0] >> 4 | |
12 | if version == 4: | |
13 | addrlen = 4 | |
14 | saddroff = 3*4 | |
15 | factory = ipaddress.IPv4Address | |
16 | elif version == 6: | |
17 | addrlen = 16 | |
18 | saddroff = 2*4 | |
19 | factory = ipaddress.IPv6Address | |
20 | else: | |
21 | raise ValueError('unsupported IP version %d' % version) | |
22 | saddr = factory(packet[ saddroff : saddroff + addrlen ]) | |
23 | daddr = factory(packet[ saddroff + addrlen : saddroff + addrlen*2 ]) | |
24 | return (saddr, daddr) | |
25 | ||
26 | #---------- address handling ---------- | |
27 | ||
28 | def ipaddr(input): | |
29 | try: | |
30 | r = ipaddress.IPv4Address(input) | |
31 | except AddressValueError: | |
32 | r = ipaddress.IPv6Address(input) | |
33 | return r | |
34 | ||
35 | def ipnetwork(input): | |
36 | try: | |
37 | r = ipaddress.IPv4Network(input) | |
38 | except NetworkValueError: | |
39 | r = ipaddress.IPv6Network(input) | |
40 | return r |