-
Notifications
You must be signed in to change notification settings - Fork 0
/
cli_parser.py
119 lines (106 loc) · 5.96 KB
/
cli_parser.py
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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
from enums.parser_enum import ParserEnum
class Parser:
def __init__(self):
self._STANDARD_PORT = 80
self._STANDARD_MAX_TTL = 30
self._STANDARD_TIMEOUT = 3
self._STANDARD_MIDDLE_LINK = ''
@staticmethod
def find(array: list, target: str) -> int:
for i in range(len(array)):
if array[i] == target:
return i
return -1
def parse(self, argv: list) -> dict:
if ParserEnum.help_flag in argv:
return {
ParserEnum.error: False,
ParserEnum.help_key: True,
ParserEnum.help_key_text: f'Справка:\r\n'
f'{ParserEnum.trace_port_flag} - порт, на котором работает traceroute '
f'(по-умолчанию стоит 80)\r\n'
f'{ParserEnum.ttl_max_flag} - максимальное время жизни пакета '
f'(максимальное количество прыжков по промежуточным узлам'
f'по-умолчанию стоит 30)\r\n'
f'{ParserEnum.timeout_flag} - максимальное время ожидания ответа'
f'от промежуточного узла с фиксированным временем жизни (по-умолчанию'
f'стоит 3 секунды)\r\n'
f'{ParserEnum.middle_link_flag} - промежуточный ip, через который должен быть'
f'построен маршрут\r\n'
f'{ParserEnum.target_flag} - адрес (ip или домен), маршрут которого'
f'хотите получить (обязательный параметр)\r\n'
}
params = dict()
if ParserEnum.trace_port_flag in argv:
try:
params[ParserEnum.trace_port_key] = int(argv[self.find(argv, ParserEnum.trace_port_flag) + 1])
except IndexError:
return {
ParserEnum.error: True,
ParserEnum.error_message: f'Вы не ввели порт, на котором будет '
f'работать traceroute ({ParserEnum.trace_port_flag})'
}
else:
params[ParserEnum.trace_port_key] = self._STANDARD_PORT
if ParserEnum.ttl_max_flag in argv:
try:
params[ParserEnum.ttl_max_key] = int(argv[self.find(argv, ParserEnum.ttl_max_flag) + 1])
except IndexError:
return {
ParserEnum.error: True,
ParserEnum.error_message: f'Вы не ввели не верное значение '
f'для максимального времени жизни ({ParserEnum.ttl_max_flag})'
}
except ValueError:
return {
ParserEnum.error: True,
ParserEnum.error_message: f'Вы не ввели не верное значение '
f'для максимального времени жизни ({ParserEnum.ttl_max_flag})'
}
else:
params[ParserEnum.ttl_max_key] = self._STANDARD_MAX_TTL
if ParserEnum.timeout_flag in argv:
try:
params[ParserEnum.timeout_key] = int(argv[self.find(argv, ParserEnum.timeout_flag) + 1])
except IndexError:
return {
ParserEnum.error: True,
ParserEnum.error_message: f'Вы не ввели не верное значение '
f'для таймаута ожидания ({ParserEnum.timeout_flag})'
}
except ValueError:
try:
params[ParserEnum.timeout_key] = float(argv[self.find(argv, ParserEnum.timeout_flag) + 1])
except ValueError:
return {
ParserEnum.error: True,
ParserEnum.error_message: f'Вы не ввели не верное значение '
f'для таймаута ожидания ({ParserEnum.timeout_flag})'
}
else:
params[ParserEnum.timeout_key] = self._STANDARD_TIMEOUT
if ParserEnum.target_flag in argv:
try:
params[ParserEnum.target_key] = argv[self.find(argv, ParserEnum.target_flag) + 1]
except IndexError:
return {
ParserEnum.error: True,
ParserEnum.error_message: 'Вы не указали адрес, маршрут которого хотите получить'
}
else:
return {
ParserEnum.error: True,
ParserEnum.error_message: 'Вы не указали адрес, маршрут которого хотите получить'
}
if ParserEnum.middle_link_flag in argv:
try:
params[ParserEnum.middle_link_key] = argv[self.find(argv, ParserEnum.middle_link_flag) + 1]
except IndexError:
return {
ParserEnum.error: True,
ParserEnum.error_message: 'Вы не указали значение для промежуточного ip'
}
else:
params[ParserEnum.middle_link_key] = self._STANDARD_MIDDLE_LINK
params[ParserEnum.error] = False
return params