mpenning / Ciscoconfparse
Programming Languages
Projects that are alternatives of or similar to Ciscoconfparse
============== ciscoconfparse
.. image:: https://travis-ci.org/mpenning/ciscoconfparse.png?branch=master :target: https://travis-ci.org/mpenning/ciscoconfparse :alt: Travis CI Status
.. image:: https://img.shields.io/pypi/v/ciscoconfparse.svg :target: https://pypi.python.org/pypi/ciscoconfparse/ :alt: Version
.. image:: https://pepy.tech/badge/ciscoconfparse :target: https://pepy.tech/project/ciscoconfparse :alt: Downloads
.. image:: http://img.shields.io/badge/license-GPLv3-blue.svg :target: https://www.gnu.org/copyleft/gpl.html :alt: License
.. contents::
.. _introduction:
Introduction: What is ciscoconfparse?
Short answer: ciscoconfparse is a Python_ library that helps you quickly answer questions like these about your configurations:
- What interfaces are shutdown?
- Which interfaces are in trunk mode?
- What address and subnet mask is assigned to each interface?
- Which interfaces are missing a critical command?
- Is this configuration missing a standard config line?
It can help you:
- Audit existing router / switch / firewall / wlc configurations
- Modify existing configurations
- Build new configurations
Speaking generally, the library examines an IOS-style config and breaks it into a set of linked parent / child relationships. You can perform complex queries about these relationships.
.. image:: https://raw.githubusercontent.com/mpenning/ciscoconfparse/master/sphinx-doc/_static/ciscoconfparse_overview_75pct.png :target: https://raw.githubusercontent.com/mpenning/ciscoconfparse/master/sphinx-doc/_static/ciscoconfparse_overview_75pct.png :alt: CiscoConfParse Parent / Child relationships
Usage
The following code will parse a configuration stored in 'exampleswitch.conf' and select interfaces that are shutdown.
.. code:: python
from ciscoconfparse import CiscoConfParse
parse = CiscoConfParse('exampleswitch.conf', syntax='ios')
for intf_obj in parse.find_objects_w_child('^interface', '^\s+shutdown'):
print("Shutdown: " + intf_obj.text)
The next example will find the IP address assigned to interfaces.
.. code:: python
from ciscoconfparse import CiscoConfParse
parse = CiscoConfParse('exampleswitch.conf', syntax='ios')
for intf_obj in parse.find_objects('^interface'):
intf_name = intf_obj.re_match_typed('^interface\s+(\S.+?)$')
# Search children of all interfaces for a regex match and return
# the value matched in regex match group 1. If there is no match,
# return a default value: ''
intf_ip_addr = intf_obj.re_match_iter_typed(
r'ip\saddress\s(\d+\.\d+\.\d+\.\d+)\s', result_type=str,
group=1, default='')
print("{0}: {1}".format(intf_name, intf_ip_addr))
What if we don't use Cisco?
Don't let that stop you.
As of CiscoConfParse 1.2.4, you can parse brace-delimited configurations_
into a Cisco IOS style (see Github Issue #17_), which means that
CiscoConfParse understands these configurations:
- Juniper Networks Junos
- Palo Alto Networks Firewall configurations
- F5 Networks configurations
CiscoConfParse also handles anything that has a Cisco IOS style of configuration, which includes:
- Cisco IOS, Cisco Nexus, Cisco IOS-XR, Cisco IOS-XE, Aironet OS, Cisco ASA, Cisco CatOS
- Arista EOS
- Brocade
- HP Switches
- Force 10 Switches
- Dell PowerConnect Switches
- Extreme Networks
- Enterasys
- Screenos
Docs
- The latest copy of the docs are
archived on the web <http://www.pennington.net/py/ciscoconfparse/>_ - There is also a
CiscoConfParse Tutorial <http://pennington.net/tutorial/ciscoconfparse/ccp_tutorial.html>_
.. _Pre-Requisites:
Pre-requisites
ciscoconfparse_ requires Python versions 2.7 or 3.5+ (note: version 3.7.0 has a bug - ref Github issue #117, but version 3.7.1 works); the OS should not matter.
.. _Installation:
Installation and Downloads
You can install into Python2.x with pip_:
::
pip install --upgrade ciscoconfparse
Use pip3 for Python3.x...
::
pip3 install --upgrade ciscoconfparse
If you don't want to use pip_, you can install with easy_install:
::
easy_install -U ciscoconfparse
Otherwise download it from PyPi <https://pypi.python.org/pypi/ciscoconfparse>_, extract it and run the setup.py script:
::
python setup.py install
If you're interested in the source, you can always pull from the github repo_
or bitbucket repo_:
-
From github_: ::
git clone git://github.com/mpenning/ciscoconfparse cd ciscoconfparse/ pip install .
.. _Other-Resources:
Other Resources
-
Dive into Python3_ is a good way to learn Python -
Team CYMRU_ has aSecure IOS Template_, which is especially useful for external-facing routers / switches -
Cisco's Guide to hardening IOS devices_ -
Center for Internet Security Benchmarks_ (An email address, cookies, and javascript are required)
.. _Bug-Tracker-and-Support:
Bug Tracker and Support
- Please report any suggestions, bug reports, or annoyances with ciscoconfparse_ through the
github bug tracker_. - If you're having problems with general python issues, consider searching for a solution on
Stack Overflow. If you can't find a solution for your problem or need more help, you canask a question. - If you're having problems with your Cisco devices, you can open a case with
Cisco TAC; if you prefer crowd-sourcing, you can ask on the Stack ExchangeNetwork Engineeringsite.
.. _Unit-Tests:
Unit-Tests
Travis CI project <https://travis-ci.org>_ tests ciscoconfparse on Python versions 2.7 through 3.8, as well as a pypy JIT_ executable.
Click the image below for details; the current build status is:
.. image:: https://travis-ci.org/mpenning/ciscoconfparse.png?branch=master :align: center :target: https://travis-ci.org/mpenning/ciscoconfparse :alt: Travis CI Status
.. _License and Copyright:
License and Copyright
ciscoconfparse_ is licensed GPLv3_; Copyright David Michael Pennington_,
2007-2021.
ciscoconfparse_ is not affiliated with Cisco Systems in any way; the word "Cisco" is a registered trademark of Cisco Systems
.. _Author:
Author and Thanks
ciscoconfparse_ was written by David Michael Pennington (mike [at]
pennington [/dot] net).
Special thanks:
- Thanks to David Muir Sharnoff for his suggestion about making a special case for IOS banners.
- Thanks to Alan Cownie for his API suggestions.
- Thanks to CrackerJackMack_ for reporting
Github Issue #13_ - Soli Deo Gloria
.. _ciscoconfparse: https://pypi.python.org/pypi/ciscoconfparse
.. _Python: http://python.org/
.. _pypy JIT: http://pypy.org/
.. _Github Issue #13: https://github.com/mpenning/ciscoconfparse/issues/13
.. _Github Issue #14: https://github.com/mpenning/ciscoconfparse/issues/14
.. _Github Issue #17: https://github.com/mpenning/ciscoconfparse/issues/17
.. _brace-delimited configurations: https://github.com/mpenning/ciscoconfparse/blob/master/configs/sample_01.junos
.. _CrackerJackMack: https://github.com/CrackerJackMack
.. _David Michael Pennington: http://pennington.net/
.. _setuptools: https://pypi.python.org/pypi/setuptools
.. _pip: https://pypi.python.org/pypi/pip
.. _virtualenv: https://pypi.python.org/pypi/virtualenv
.. _github repo: https://github.com/mpenning/ciscoconfparse
.. _bitbucket repo: https://bitbucket.org/mpenning/ciscoconfparse
.. _bitbucket: https://bitbucket.org/mpenning/ciscoconfparse
.. _github: https://github.com/mpenning/ciscoconfparse
.. _mercurial: http://mercurial.selenic.com/
.. _github bug tracker: https://github.com/mpenning/ciscoconfparse/issues
.. _hg-git: http://hg-git.github.io/
.. _regular expressions: http://docs.python.org/2/howto/regex.html
.. _docs: http://www.pennington.net/py/ciscoconfparse/
.. _ipaddr: https://code.google.com/p/ipaddr-py/
.. _GPLv3: http://www.gnu.org/licenses/gpl-3.0.html
.. _ASF License 2.0: http://www.apache.org/licenses/LICENSE-2.0
.. _Dive into Python3: http://www.diveintopython3.net/
.. _Network Engineering: http://networkengineering.stackexchange.com/
.. _Stack Overflow: http://stackoverflow.com/
.. _ask a question: http://stackoverflow.com/questions/ask
.. _ciscoconfparse NetworkToCode slack channel: https://app.slack.com/client/T09LQ7E9E/C015B4U8MMF/
.. _Secure IOS Template: https://www.cymru.com/Documents/secure-ios-template.html
.. _Center for Internet Security Benchmarks: https://learn.cisecurity.org/benchmarks
.. _Team CYMRU: http://www.team-cymru.org/
.. _Cisco TAC: http://cisco.com/go/support
.. _Juniper networks: http://www.juniper.net/
.. _Cisco's Guide to hardening IOS devices: http://www.cisco.com/c/en/us/support/docs/ip/access-lists/13608-21.html
