Source code for Exscript.emulators.iosemu

# 
# Copyright (C) 2010-2017 Samuel Abels
# The MIT License (MIT)
# 
# Permission is hereby granted, free of charge, to any person obtaining
# a copy of this software and associated documentation files
# (the "Software"), to deal in the Software without restriction,
# including without limitation the rights to use, copy, modify, merge,
# publish, distribute, sublicense, and/or sell copies of the Software,
# and to permit persons to whom the Software is furnished to do so,
# subject to the following conditions:
# 
# The above copyright notice and this permission notice shall be
# included in all copies or substantial portions of the Software.
# 
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
"""
Cisco IOS emulator.
"""
from __future__ import unicode_literals
#from builtins import str
import re
from Exscript.emulators import VirtualDevice

iosbanner = '''
Connected to %s.
Escape character is '^]'.


Unauthorized access prohibited!


%s line 2 


at '%s' port '/dev/vty0' from '12.34.56.78'
'''

[docs]def show_diag(data): slot = re.search(r'(\d+)', data).groups()[0] return """ SLOT %s (RP/LC 0 ): 16 Port ISE Packet Over SONET OC-3c/STM-1 Single Mode/IR LC connector MAIN: type 79, 800-19733-08 rev A0 Deviation: 0 HW config: 0x01 SW key: 00-00-00 PCA: 73-7614-07 rev A0 ver 1 Design Release 1.0 S/N SAL1026SSZX MBUS: Embedded Agent Test hist: 0x00 RMA#: 00-00-00 RMA hist: 0x00 DIAG: Test count: 0x00000000 Test results: 0x00000000 FRU: Linecard/Module: 16OC3X/POS-IR-LC-B= Processor Memory: MEM-LC-ISE-1024= Packet Memory: MEM-LC1-PKT-512=(Non-Replaceable) L3 Engine: 3 - ISE OC48 (2.5 Gbps) MBUS Agent Software version 2.68 (RAM) (ROM version is 3.66) ROM Monitor version 18.0 Fabric Downloader version used 7.1 (ROM version is 7.1) Primary clock is CSC 1 Board is analyzed Board State is Line Card Enabled (IOS RUN ) Insertion time: 00:00:30 (36w1d ago) Processor Memory size: 1073741824 bytes TX Packet Memory size: 268435456 bytes, Packet Memory pagesize: 16384 bytes RX Packet Memory size: 268435456 bytes, Packet Memory pagesize: 16384 bytes 0 crashes since restart """ % slot
commands = ( ('show version', """ Cisco Internetwork Operating System Software IOS (tm) GS Software (C12KPRP-P-M), Version 12.0(32)SY6c, RELEASE SOFTWARE (fc3) Technical Support: http://www.cisco.com/techsupport Copyright (c) 1986-2008 by cisco Systems, Inc. Compiled Mon 08-Sep-08 15:31 by leccese Image text-base: 0x00010000, data-base: 0x055CD000 ROM: System Bootstrap, Version 12.0(20040128:214555) [assafb-PRP1P_20040101 1.8dev(2.83)] DEVELOPMENT SOFTWARE BOOTLDR: GS Software (C12KPRP-P-M), Version 12.0(32)SY6c, RELEASE SOFTWARE (fc3) S-EA1 uptime is 36 weeks, 1 day, 15 hours, 9 minutes Uptime for this control processor is 36 weeks, 1 day, 14 hours, 30 minutes System returned to ROM by reload at 03:32:54 MET Mon Feb 16 2009 System restarted at 03:25:22 MET Tue Mar 10 2009 System image file is "disk0:c12kprp-p-mz.120-32.SY6c.bin" cisco 12416/PRP (MPC7457) processor (revision 0x00) with 1048576K bytes of memory. MPC7457 CPU at 1263Mhz, Rev 1.1, 512KB L2, 2048KB L3 Cache Last reset from power-on Channelized E1, Version 1.0. 2 Route Processor Cards 2 Clock Scheduler Cards 3 Switch Fabric Cards 4 T1/E1 BITS controllers 1 Quad-port OC3c ATM controller (4 ATM). 2 16-port OC3 POS controllers (32 POS). 2 four-port OC12 POS controllers (8 POS). 2 twelve-port E3 controllers (24 E3). 1 Four Port Gigabit Ethernet/IEEE 802.3z controller (4 GigabitEthernet). 4 OC12 channelized to STS-12c/STM-4, STS-3c/STM-1 or DS-3/E3 controllers 4 ISE 10G SPA Interface Cards (12000-SIP-601) 3 Ethernet/IEEE 802.3 interface(s) 56 FastEthernet/IEEE 802.3 interface(s) 14 GigabitEthernet/IEEE 802.3 interface(s) 111 Serial network interface(s) 4 ATM network interface(s) 50 Packet over SONET network interface(s) 2043K bytes of non-volatile configuration memory. 250880K bytes of ATA PCMCIA card at slot 0 (Sector size 512 bytes). 65536K bytes of Flash internal SIMM (Sector size 256K). Configuration register is 0x2102 """.lstrip()), (r'sh\S* ip int\S* brie\S*', """ Interface IP-Address OK? Method Status Protocol Ethernet0 10.108.00.5 YES NVRAM up up Ethernet1 unassigned YES unset administratively down down Loopback0 10.108.200.5 YES NVRAM up up Serial0 10.108.100.5 YES NVRAM up up Serial1 10.108.40.5 YES NVRAM up up Serial2 10.108.100.5 YES manual up up Serial3 unassigned YES unset administratively down down """.lstrip()), ('show interface.*', """ FastEthernet0/2 is administratively down, line protocol is down Hardware is i82545, address is 0001.c9f4.c418 (bia 0001.c9f4.c418) MTU 1500 bytes, BW 100000 Kbit, DLY 100 usec, rely 255/255, load 1/255 Encapsulation ARPA, loopback not set Keepalive set (10 sec) Half-duplex, Auto Speed ARP type: ARPA, ARP Timeout 04:00:00 Last input never, output never, output hang never Last clearing of "show interface" counters never Input queue: 0/75/0/0 (size/max/drops/flushes); Total output drops: 0 Queueing strategy: fifo Output queue: 0/40 (size/max) 5 minute input rate 0 bits/sec, 0 packets/sec 5 minute output rate 0 bits/sec, 0 packets/sec 0 packets input, 0 bytes Received 0 broadcasts, 0 runts, 0 giants, 0 throttles 0 input errors, 0 CRC, 0 frame, 0 overrun, 0 ignored 0 watchdog, 0 multicast 0 input packets with dribble condition detected 0 packets output, 0 bytes, 0 underruns 1 output errors, 0 collisions, 0 interface resets 0 babbles, 0 late collision, 0 deferred 1 lost carrier, 0 no carrier 0 output buffer failures, 0 output buffers swapped out """), (r'show diag \d+', show_diag), (r'^!.*', '') )
[docs]class IOSEmulator(VirtualDevice):
[docs] def __init__(self, hostname, echo = True, login_type = VirtualDevice.LOGIN_TYPE_BOTH, strict = True, banner = None): thebanner = iosbanner % (hostname, hostname, hostname) VirtualDevice.__init__(self, hostname, echo = echo, login_type = login_type, strict = strict, banner = banner or thebanner) self.user_prompt = 'Username: ' self.password_prompt = 'Password: ' self.prompt = hostname + '#' for command, handler in commands: self.add_command(command, handler)