Я пытаюсь поменять местами адреса и префиксы источника и назначения / префиксы IP-списков доступа, которые я беру с существующей записью ACL и создаю запись в обратном направлении, как указано ниже:
Введите:
разрешить ip любому хосту 10.22.122.161
разрешить ip host 10.11.198.18 любой
allow ip host 10.22.122.161 192.168.150.16 0.0.0.7
allow ip host 10.22.122.161 host 10.22.122.255
разрешить ip любому хосту 10.22.122.255
allow ip 192.168.150.16 0.0.0.7 host 10.22.122.255
разрешить ip любой 192.168.150.16 0.0.0.7
IP-адрес разрешения 192.168.150.16 0.0.0.7 любой
разрешить ip любой 172.16.150.208 0.0.0.15
allow tcp any 172.16.150.208 0.0.0.15
allow tcp 172.16.150.208 0.0.0.15 192.168.150.16 0.0.0.7
Ожидаемый результат:
разрешить ip host 10.22.122.161 любой
разрешить ip любому хосту 10.11.198.18
allow ip 192.168.150.16 0.0.0.7 host 10.22.122.161
allow ip host 10.22.122.255 host 10.22.122.161
разрешить ip host 10.22.122.255 любой
allow ip host 10.22.122.255 192.168.150.16 0.0.0.7
IP-адрес разрешения 192.168.150.16 0.0.0.7 любой
разрешить ip любой 192.168.150.16 0.0.0.7
IP-адрес разрешения 172.16.150.208 0.0.0.15 любой
разрешение tcp 172.16.150.208 0.0.0.15 любая
allow tcp 172.16.150.208 0.0.0.15 192.168.150.16 0.0.0.7
allow tcp 192.168.150.16 0.0.0.7 172.16.150.208 0.0.0.15
но в некоторых случаях моя функция не может поменять местами источник и пункт назначения
Мои коды не пройдены в следующих тестовых случаях:
allow ip host 10.22.122.161 192.168.150.16 0.0.0.7
Следующее регулярное выражение не соответствует 192.168.150.16 0.0.0.7
с (. *)
p = re.sub (r '(. ) (\ bany \ b | \ bhost \ b \ d {1,3}. \ D {1,3}. \ D {1,3} . \ d {1,3}) (. ) ', r' \ 1 \ 3 \ 2 ', ACELine)
#!/usr/bin/python3
import re
def ChangeACESrcDst(ACELine):
ReversedACE = str()
protocols_list = [
'ip',
'tcp',
'udp',
'gre',
'icmp'
]
if (bool(re.search(r'(\bpermit\b|\bdeny\b)',ACELine))):
ACE_ITEMS = ACELine.split()
if ACE_ITEMS[1] in protocols_list:
if len(ACE_ITEMS) == 5:
if ACE_ITEMS[2] == 'host' or ACE_ITEMS[2] == 'any':
p = re.sub(r'(.*)(\bany\b|\bhost \b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}) (.*)',r'\1\3 \2',ACELine)
print(ACELine)
print(p)
elif ACE_ITEMS[4] == 'host' or ACE_ITEMS[4] == 'any':
p = re.sub(r'(.*) (\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3} \d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}) (\bany\b|\bhost \b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})',r'\1 \3 \2',ACELine)
print(ACELine)
print(p)
elif len(ACE_ITEMS) == 6:
if ACE_ITEMS[2] == 'host' and ACE_ITEMS[4] == 'host':
p = re.sub(r'(.*) (host \d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}) (host \d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})',r'\1 \3 \2',ACELine)
print(ACELine)
print(p)
else:
p = re.sub(r'(.*) (\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3} \d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}) (\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3} \d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})',r'\1 \3 \2',ACELine)
print(ACELine)
print(p)
else:
print(f'ERROR: ACE items length must be either 5 or 6 : {ACELine}')
else:
print(f'ERROR: Protocols not supported : {ACE_ITEMS[1]}')
exit()
print('\n')
return ReversedACE
if __name__ == "__main__":
aces = [
'permit ip any host 10.22.122.161',
'permit ip host 10.11.198.18 any',
'permit ip host 10.22.122.161 192.168.150.16 0.0.0.7',
'permit ip host 10.22.122.161 host 10.22.122.255',
'permit ip any host 10.22.122.255',
'permit ip 192.168.150.16 0.0.0.7 host 10.22.122.255',
'permit ip any 192.168.150.16 0.0.0.7',
'permit ip 192.168.150.16 0.0.0.7 any',
'permit ip any 172.16.150.208 0.0.0.15',
'permit tcp any 172.16.150.208 0.0.0.15',
'permit tcp 172.16.150.208 0.0.0.15 192.168.150.16 0.0.0.7'
]
for ace in aces:
ace = (ChangeACESrcDst(ace))
Введите:
allow ip host 10.22.122.161 192.168.150.16 0.0.0.7
Ожидаемый результат:
allow ip 192.168.150.16 0.0.0.7 host 10.22.122.161