forked from sixiangdeweicao/6Gen-optimization
-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathaliases-lpm.py
More file actions
102 lines (91 loc) · 3.67 KB
/
Copy pathaliases-lpm.py
File metadata and controls
102 lines (91 loc) · 3.67 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
#!/usr/bin/env python
'''
python aliases-lpm.py -a [aliasedprefix.txt] -n [nap.txt] -i [input filename] --non-aliased-result [non-aliased.txt] --aliased-result [aliased.txt]
python aliases-lpm.py -a [aliasedprefix.txt] -n [nap.txt] -i [input filename] --simple
'''
from __future__ import print_function
import argparse
import sys
try:
import SubnetTree
except Exception as e:
print(e, file=sys.stderr)
print("Use `pip install pysubnettree` to install the required module", file=sys.stderr)
sys.exit(1)
def read_non_aliased(tree, fh):
return fill_tree(tree, fh, ",0")
def read_aliased(tree, fh):
return fill_tree(tree, fh, ",1")
def fill_tree(tree, fh, suffix):
for line in fh:
line = line.strip()
try:
tree[line] = line + suffix
except ValueError as e:
print("Skipped line '" + line + "'", file=sys.stderr)
return tree
def main():
parser = argparse.ArgumentParser()
parser.add_argument("-a", "--aliased-file", required=True, type=argparse.FileType('r'), help="File containing aliased prefixes")
parser.add_argument("-n", "--non-aliased-file", required=True, type=argparse.FileType('r'), help="File containing non-aliased prefixes")
parser.add_argument("-i", "--ip-address-file", required=True, type=argparse.FileType('r'), help="File containing IP addresses to be matched against (non-)aliased prefixes")
parser.add_argument("--non-aliased-result", type=str, help="File")
parser.add_argument("--aliased-result", type=str, help="File")
parser.add_argument("--simple", action="store_true", help="File")
args = parser.parse_args()
# Store aliased and non-aliased prefixes in a single subnet tree
tree = SubnetTree.SubnetTree()
# Read aliased and non-aliased prefixes
tree = read_aliased(tree, args.aliased_file)
tree = read_non_aliased(tree, args.non_aliased_file)
skipcount = 0
if args.simple:
aliased_count = 0
non_count = 0
for line in args.ip_address_file:
line = line.strip()
if line[0] == '#': continue
try:
if line in tree:
isAliased = tree[line]
if isAliased[-1]=='1':
aliased_count += 1
elif isAliased[-1]=='0':
non_count += 1
else:
print(line + isAliased)
skipcount += 1
else:
skipcount += 1
except KeyError as e:
print("Skipped line '" + line + "'", file=sys.stderr)
print('aliased {} non-aliased {} skip {}'.format(aliased_count, non_count, skipcount))
exit(0)
f_non = open(args.non_aliased_result, 'w')
f_alias = open(args.aliased_result, 'w')
# Read IP address file, match each address to longest prefix and print output
for line in args.ip_address_file:
line = line.strip()
try:
#if line in tree:
# f_alias.write(line + '\n')
#else:
# f_non.write(line + '\n')
if line in tree:
isAliased = tree[line]
if isAliased[-1]=='1':
f_alias.write(line + '\n')
elif isAliased[-1]=='0':
f_non.write(line + '\n')
else:
print(line + isAliased)
skipcount += 1
else:
skipcount += 1
except KeyError as e:
print("Skipped line '" + line + "'", file=sys.stderr)
f_non.close()
f_alias.close()
print('skip count {}'.format(skipcount))
if __name__ == "__main__":
main()