Análise automática de configuração do Cisco IOS
Alternatively, is there a better way I can retrieve this information that would make it easier to parse?
As configurações do roteador / switch de análise são bastante complicadas devido às camadas de hierarquia nas configurações do IOS; sempre que possível, use uma ferramenta especializada em análise para você. Uma dessas ferramentas é ciscoconfparse (docs são aqui ) Nota 1 . ciscoconfparse tem uma bateria completa de testes unitários, que garantem que a análise permaneça consistente entre versões da ferramenta.
Assumindo que a configuração vem no formato exato usado pelo Cisco IOS show running-config
ou show startup-config
, ciscoconfparse localiza automaticamente as configurações no nível da interface para você. Isso significa que você pode automatizar a padronização de configurações globais e de interface ... Esta é uma auditoria de configuração de interface de switch na documentação. ciscoconfparse tem muitas funcionalidades; você deveria passar algum tempo lendo a documentação.
Existem também alguns métodos especializados que fazem muita análise de valor específico para você; esses métodos estão atualmente em versão beta - e só visíveis no código-fonte ... para Por exemplo, suponha que você tenha uma configuração de switch salva como c6509.conf
!
interface GigabitEthernet2/8
ip address 192.0.2.1 255.255.255.252
mtu 9000
carrier-delay msec 50
!
Você pode usar um script ou o intérprete python para recuperar o endereço IP e carrier-delay
em representações de python nativas ...
[mpenning@tsunami ~]$ python
Python 2.7.3 (default, Jan 2 2013, 13:56:14)
[GCC 4.7.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>> from ciscoconfparse import CiscoConfParse
>>> config = CiscoConfParse('c6509.conf', factory=True)
>>>
>>> intfs = config.find_objects('interface GigabitEthernet2/8', exactmatch=True)
>>> intfs
[<IOSIntfLine # 1 'GigabitEthernet2/8' info: '192.0.2.1/30'>]
>>>
>>> intfs[0].ip_addr
'192.0.2.1'
>>>
>>> intfs[0].has_manual_carrierdelay
True
>>>
>>> intfs[0].manual_carrierdelay
0.05
>>>
>>> intfs[0].manual_mtu
9000
>>>
Se você quiser a funcionalidade beta, precisará analisar a configuração com factory=True
, conforme mostrado acima ...
Capacidades de análise nativa do Cisco IOS
My goal was to handle settings for interfaces differently from global settings; for example, I can ignore bad settings on interfaces that are disabled.
Are there separate commands for getting global settings and getting interface definitions (e.g. show global settings and a show interface settings type of commands)?
O IOS permite que você veja configurações individuais no nível da interface, mas é muito doloroso quando você tem centenas de interfaces ... imagine executar esse comando para cada interface ...
CORE01.PUB.DAL02#sh runn int gi1/2
Building configuration...
Current configuration : 242 bytes
!
interface GigabitEthernet1/2
description Link to edge01.pub.dal02
ip address 192.0.2.46 255.255.255.252
ip ospf network point-to-point
media-type rj45
end
CORE01.PUB.DAL02#
Dependendo da imagem que você está executando, o Cisco IOS permite algumas outras seções de configuração global ... isso é de um roteador executando 12.4 ...
EDGE01.PUB.DEN#sh running-config ?
brief configuration without certificate data
class-map Show class-map information
full full configuration
interface Show interface configuration
linenum Display line numbers in output
map-class Show map class information
policy-map Show policy-map information
view View options
| Output modifiers
<cr>
EDGE01.PUB.DEN#
Também é possível obter partes da configuração global usando expressões regulares do IOS da CLI ... por exemplo ...
EDGE01.PUB.DEN#show runn | include ^enable
enable secret 5 $1$mOmQ$sORLRqZQZ/cr7KSyrXUPZ.
EDGE01.PUB.DEN#
FYI, é um hash MD5 para uma senha de ativação de "cisco", que você deseja sinalizar, se encontrado em produção ...
Respondendo a este comentário :
Is there a good way to define when an interface definition ends? It appears that all interface lines are indented by one space but I'm not sure if that's standard across configs
Sim, o Cisco IOS sempre recolhe elementos de configuração filhos por um espaço extra ... independentemente de o filho ser uma instrução de configuração de interface, uma linha de ACL estendida IP, etc ...
Notas finais
Observação 1 Isenção de responsabilidade do Stack Stack : sou o autor.