Сводка
Ожидаемый сценарий + ssh => Брандмауэр контрольной точки
Необходимо проанализировать выходные данные команды при использовании ожидаемого сценария.
Цель состоит в том, чтобы извлечьIP-адрес (subnet4 :) и имя (name :) для каждого сетевого объекта.Затем сравните извлеченный IP-адрес с введенным адресом и, если они равны, используйте переменную $ name (после сопоставления ее с соответствующим IP-адресом) в качестве службы при создании правила доступа на брандмауэре.
Command_Output_To_Be_Parsed
objects:
- uid: "67c51c9a-81e3-43ee-ba96-b733c7672d83"
name: "CP_default_Office_Mode_addresses_pool"
type: "network"
domain:
uid: "41e821a0-3720-11e3-aa6e-0800200c9fde"
name: "SMC User"
domain-type: "domain"
subnet4: "172.16.10.0"
mask-length4: 24
subnet-mask: "255.255.255.0"
- uid: "caee1116-8087-4310-9208-b422d3628a7e"
name: "IPv6_Link_Local_Hosts"
type: "network"
domain:
uid: "a0bbbc99-adef-4ef8-bb6d-defdefdefdef"
name: "Check Point Data"
domain-type: "data domain"
subnet6: "fe80::"
mask-length6: 64
from: 1
to: 2
total: 2
Что я пробовал до сих пор
1) Не удалось получить единственное имя в переменной $ name
2) Сделалне понял, как связать IP-адрес с именем
send "mgmt add network name DuplicateTst subnet $srcIPAddr mask-length 32\r"
expect {
-re "same" {
expect ">"
send "set clienv rows 0\r"
expect ">"
send "mgmt show networks\r"
expect {
-re "objects(.*)>" {
set Outcome $expect_out(1,string)
puts "The whole array $Outcome"
#exit 100
}
}
#timeout { puts "timeout"}
}
}
set lines [split $Outcome "\n"]
foreach line $lines {
#puts "line: $line"
set notCleanIP [regexp -inline -lineanchor -all -- {(?:)(\s+)\"(?!255) \d+\.\d+\.\d+\.\d+\"} $line];
set notCleanName [regexp -inline -lineanchor -all -- {(?:)(\s+)name: \"[a-z A-Z 0-9]+\"} $line ];
set cleanName [regexp -inline -lineanchor -all -- {(?:)[a-z A-Z 0-9]+} $notCleanName ]
set cleanIP [regexp -inline -lineanchor -all -- {(?:)\d+\.\d+\.\d+\.\d+} $notCleanIP ];
puts "CleanIP >>> $cleanIP"
puts "CleanName >>> $cleanName"
if { $cleanIP == $srcIPAddr } {
#puts "equivalent *************************"
#set cleanName [regexp -inline -lineanchor -all -- {(?:)[a-z A-Z 0-9]+} $notCleanName ];
#puts "################# clean name >> $cleanName"
}
#set newVariable2 [regexp -inline -lineanchor -all -- {(?:)(\s+)\"[a-z A-Z 0-9]+\"} $line];
puts "NotCleanIP >>> $notCleanIP"
puts "NotCleanName >>> $notCleanName"
}
exit 100
Результат
{ name} { } AddressSrc8b3c855163437d0be28cc8995864 { } { }
что не то, что я ожидал.Только ожидалось: AddressSrc8b3c855163437d0be28cc8995864
CleanIP >>> 100.5.5.5 IP-адрес правильно извлечен.
Вопрос
Как решить эту проблему?Любые идеи будут оценены.
Спасибо.