12/1/2021

Python Gns3

4. Python (version 3) code to telnet to R1

Next we create Python code to telnet to our R1 router, login with our provided username and password. It will also enter privileged mode (Router#) with “cisco” as the secret password. Then create a loopback interface 1 with IP address of 1.1.1.1/32 on our router:

The source code can also be downloaded here.

Note: The letter “b” in front of the string (for example in line: tn.read_until(b”Username:”)) indicates that the literal should become a bytes literal in Python 3. Bytes literals are always prefixed with ‘b’ or ‘B’; they produce an instance of the bytes type instead of the str type.

Save this code to the “telnet.py” file to any location you want (we saved it in “C:/Users/PC/PycharmProjects/Python_Telnet/telnet.py”). Then open command line and run this file as follows:

Of course you have to change the correct path to your Python file. Notice that we are using Python version 3 to run this file. If we are lucky, we will get a nice result like this:

Install python-pip and python3-pip to use the gns3 from source: sudo apt install python-pip python3-pip. Install from PyPi as listed: Copy. Sudo pip3 install gns3-server. Sudo pip3 install gns3-gui. Once installed, additional dependencies such as QtSvg, qtwebsockets, and dynamips will be required in order for the application to run. We will practice Python 3 and Network Automation in the GNS3 Environment, and first we will learn the Basics: starting from Variables and Strings, refreshing Linux command skills, going through Loops and Comparisons, taking Quizes and practicing Python 3 Syntax in different scenarios, then we will start managing the cisco Devices using Python 3 with Netmiko, and doing a lot of Cool Things, creating. GNS3 server Python 482 193 gns3-web-ui. WebUI implementation for GNS3 TypeScript 66 26 gns3-registry. GNS3 devices registry Shell 218 310 Type All Select type. All Sources Forks Archived Mirrors. Language All Select language. All C JavaScript Python Shell TypeScript. Learn Python programming. In this series of videos I will show you how you can quickly and easily program Cisco networks using Python.More free Python videos. Explore the full course on Udemy (special discount included in the link): https://www.udemy.com/python-for-network-engineers-netmiko-napalm-pyntc-telnet-ssh.

Note: If you use some Python IDEs (like PyCharm) to run this file then the “Password: ” prompt will not be shown so please make sure to run it under “cmd”.

Now on R1 issue the “show ip interface brief” command to see our new Loopback 1 interface has been created:

5. Some errors you may see during the configuration

The hardest error you may see in this lab is the telnet connection to R1 does not work with the following error:

C:UsersPC>python C:/Users/PC/PycharmProjects/Python_Telnet/telnet.py
Enter Username:R1
Password: (type “12345” here)
Successfully passed getpass
Traceback (most recent call last):
File “C:/Users/PC/PycharmProjects/Python_Telnet/telnet.py”, line 8, in <module>
tn = telnetlib.Telnet(host)
File “C:Program Files (x86)Python37-32libtelnetlib.py”, line 218, in __init__
self.open(host, port, timeout)
File “C:Program Files (x86)Python37-32libtelnetlib.py”, line 234, in open
self.sock = socket.create_connection((host, port), timeout)
File “C:Program Files (x86)Python37-32libsocket.py”, line 727, in create_connection
raise err
File “C:Program Files (x86)Python37-32libsocket.py”, line 716, in create_connection
sock.connect(sa)
TimeoutError: [WinError 10060] A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond

To solve this problem we recommend you to:
+ Check step 3 – Verify the connection between our laptop and router in GNS3 carefully to make sure two devices can communicate normally
+ Try to run command line in Administrator mode (Search > Cmd > Right-click and choose “Run as administrator”)
+ Disable any firewall, antivirus software during the lab
+ Check the IP address of “host” in “telnet.py” file carefully (it should be “host = “10.1.1.1” in our lab)

Another problem we may encounter is after typing “Username: R1” and waiting for the “Password” prompt. The program is suspended:

As we said above, if we run this Python file through some Python IDEs (like PyCharm), the “Password” function of “getpass.getpass()” will not interpreted correctly and interrupted.

Latest version

Released:

GNS3 Proxy based on proxy.py by Abhinav Singh (https://github.com/abhinavsingh/proxy.py)

Project description

Proof-of-concept for a Proxy Server for GNS3. The proxy is configured as aregular remote server in the GNS3-GUI, as the GNS3-GUI client does not yetsupport proxies gns3-gui issue #2696. Basic ideais to allow the use of central GNS3 server backends for classroom / lab setups,as used, e.g., in the Network Laboratory of Fulda University of AppliedSciences. Students can connect to the proxy and requests will be authenticated,filtered and forwarded to appropriate backend servers. Proxy authenticationalso circumvents the current lack of multi-user support in GNS3. Without theproxy, due to the multi user limitations (see 'Multiple Users Environment'in GNS3 Security),users will have to use the same admin credentials for GNS3 to access thebackend. Also, requests cannot be filtered and authorized (e.g., to denydeletion/creation of projects etc.). As GNS3 does not support proxies, severaltweaks were necessary to the forked proxy.py project to allow transparentREST and WebSocket passthrough.

Features

Inherited from proxy.py:

  • Distributed as a single file module
  • No external dependency other than standard Python library
  • Support for http, https and websockets request proxy
  • Optimized for large file uploads and downloads
  • IPv4 and IPv6 support

Changes/enhancements to proxy.py:

  • Redirect requests to backend servers (fixed proxying independent from request URL)
  • Definition of users (username and password used in GNS3-GUI) for authentication and authorization at the proxy, proxy replaces credentials for backend servers
  • Selection (mapping) of GNS3 backend server and possibility of load-balancing based on username (using regexp)
  • Filtering of denied requests to server backends (based on username, REST/HTTP method/URL path/headers/body (using regexp)
  • Configuration file to allow basic proxy configuration as well as GNS3 backend server, users, mappings and request filters
  • Support for REST calls (GET requests with body etc., not handled by proxy.py)
  • Fixes and tweaks to allow the connection to GNS3 backends, especially keeping connections alive and leaving HTTP headers to support direct passthrough of WebSocket connections
  • Basic access logging/status monitoring support

Further utilities provided to use the proxy:

  • gns3_proxy_manage_projects.py allows management of projects on backend servers, e.g., bulk import, export,start, stop, delete projects on all or certain backend servers based on regexp.
  • gns3_proxy_replicate_projects.py supports replication of projects across backend servers.

gns3_proxy_manage_project.py and gns3_proxy_replicate_projects.py be combined with cron entry to run tasks periodically.

Concept

In our Network Laboratory we use several network emulators (besides GNS3 esp., mininet, CML-P and EVE-NG) and simulatorsfor courses and lab sessions as well as individual research or students' projects. As GNS3 is focusing on single userinstallations, several changes were necessary to provide lab session in class as well as to students working fromat home. The following figure describes our setup:

Using gns3-proxy, we can use separate credentials for users accessing the proxy without needing to share the singleadmin user provided by the standard gns3 server. However, no modifications are necessary to the standard GNS3 serverused in our backends and for the GNS3 client GUI. Users defined in the proxy, e.g., a group of students workingtogether in a group or on individual projects from at home, will be mapped to an individual backend server allowingload balancing and failover, since GNS3 compared to other network emulation environments does not offer a cluster setupto spread running projects and contained resources. The proxy also allows to filter and hence deny requests thatcontain modifications to projects. Prepared projects are periodically synced to all server backends using cron and thereplication utility gns3_proxy_replicate_projects.py.

Installation

You can clone this repository or simply copy gns3_proxy.py and gns3_proxy_config.ini to a host that has Python >=3.4installed.

Even easier is the installation using a Docker container. Simply install and run the latest version of the gns3-proxycontainer imagefrom Docker Hub, e.g., using

$ docker pull flex/gns3-proxy

$ docker run -p 0.0.0.0:14080:14080/tcp flex/gns3-proxy

You can use a bootstrap script to install the sample scripts, pull the container image an run it:

$ bash <(curl -s https://raw.githubusercontent.com/srieger1/gns3-proxy/develop/scripts/docker-container-example/bootstrap-gns3-proxy-container)

Also, you can install the gns3-proxy from PyPI using

$ pip install gns3-proxy

Configuration

Settings of the proxy are stored in gns3_proxy_config.ini.The [proxy] section contains following parameters for gns3-proxy:

  • hostname: IP address or corresponding hostname the proxy should bind to, listening for incoming requests (default: 0.0.0.0)
  • port TCP port the proxy will listen on (default: 14080)
  • backend_user Username to use to connect to GNS3 server backend (default: admin, standard GNS3 server user)
  • backend_password Password to use to connect to GNS3 server backend (default: password)
  • backend_port TCP port the backend servers listen on (default: 3080, standard GNS3 server port)
  • default_server Default server backend to use if no individual mapping for the user was found. Can be omitted to use explicit mapping (default: gns3-1)
  • backlog Backlog of the proxy. Increase to allow the processing of more concurrent requests (default: 1000)
  • server-recvbuf-size Server receive buffer size (TCP socket) of the proxy in bytes. Increase this value for better performance of large responses from backend servers (default: 8192, recommended for production: 1048576)
  • client-recvbuf-size Client receive buffer size (TCP socket) of the proxy in bytes. Increase this value for better performance of large requests from clients (default: 8192, recommended for production: 1048576)
  • open-file-limit Maximum number of parallel open files (socket fds) of the proxy (default: 1024)
  • log-level Log level. Increase to DEBUG for debugging output. (default: INFO)

The [servers] section contains the defined backend servers (server_name=ip_address), e.g.:

The [users] section defines the users allowed to access the proxy and their passwords (username=password), e.g.:

The [mapping] section maps users to the backend servers (mapping_id='user regexp':'server_name'), e.g.:

The [project-filter] section allows for filtering projects shown in the project list for individual users. Onlyprojects matching the filter (filter_id='username regexp':'project name filter') are listed.

The [deny] section defines requests that should be filtered and hence denied by the proxy (rule_id='user regexp':'http_request_method':'url regexp':'header regexp':'body regexp'), e.g. to deny modification to existing projects as well as deletion and creation of projects:

Gns3 Python Training

Installing a new server backend

Deploy the GNS3 server appliance as usual. You can find further information regarding the installation of a serverfor multiple clients in the GNS3 server for multiple clients docu.Make sure to allow VT-x/AMD-V for the backend server. If configured correctly, 'KVM support available: true' should bedisplayed in the menu after starting the server. The server should be configured to use a static IP address. This canbe done using the Shell or selecting the option 'Network' (Configure network settings) from the GNS3 menu. Configurestatic IP addresses using the template in /etc/netplan/90_gns3vm_static_netcfg.yaml.

Afterwards you can use 'Migrate' from another GNS3 host to migrate setup and images and projects to the new backend.

To configure the backend directly for gns3-proxy, an easier option is to use the provided setup-backend.shscript, e.g., by running:

Python Gns3 Download

$ ./setup-backend.sh gns3_proxy_config.ini 192.168.229.12

The first argument should lead to a gns3-proxy config containing backend port, username, password to use. Secondargument is the the IP address of the new backend to be configured.

You can use gns3_proxy_replicate_images.pyand gns3_proxy_replicate_templates.pyto replicate all templates and images of an existing backend server to new server. These scripts can also be usedperiodically using cron to replicate images and templates to all gns3-proxy backends.

gns3_proxy_manage_images.py andgns_proxy_manage_templates.pyadditionally offer im- and export as well as deletion and listing of all images and templates on backend servers.

Gns3

Manual configuration of GNS3 server backends

The only change necessary in the GNS3 server backends, is to edit the regulargns3_server.conf (available in the appliance terminal and, e.g., used tochange username password etc., see alsoGNS3 server configuration file)and change the hostname from 0.0.0.0 to the IP address the server shouldlisten on, e.g.:

host = 192.168.1.100

After you changed the config of the GNS3 backend servers and restarted them, configure gns3_proxy_config.ini basedon your needs and run gns3_proxy.py. You can then, configure GNS3-GUI to use the proxy as a remote GNS3 server.By default, the proxy listens on 0.0.0.0 and TCP port 14080.

Deploying and managing projects on gns3-proxy backends

gns3_proxy_replicate_projects.py facilitates the replication of projects across backend servers.Command syntax is:

The provided example crontab contains examples touse gns3_proxy_replicate_projects.py. For example:

will replicate all GNS3 project names beginning with 'KommProt' from the backend server gns3-master as the source toall backend servers matching the regular expression 'gns3-.(.*)'. The option --force tells the utility to overwrite existingprojects with the same name on the targets without further notice. The option --regenerate-mac-address searches for thegiven MAC address in the projects and creates a new locally administered MAC address. This is especially necessary forlinks to cloud node types in the project. Otherwise all projects will use the same address leading to duplicate MAC andconsequently duplicated IP addresses.

gns3_proxy_manage_projects.py facilitates the management of projects on backend servers.Command syntax is:

The provided example crontab contains examples touse gns3_proxy_manage_projects.py. For example:

will show the status of all projects on all backend server.

Python Gns3

will start the project with the name TestProject on the server gns3-1 defined as a backend in gns3_proxy_config.ini.Can be used, e.g., together with cron to start the project ahead of time for lab sessions or courses, avoidingwaiting for projects to be ready for use when students take the lab.

Gns3 Python Appliance

will export the project TestProject from gns3-1 to a ZIP file that can be used as a backup, e.g. to import later usingGNS3 GUI, or --import-from-file option, like:

will import GNS3 project exported in file project.zip to backend server gns3-1. The specified project-id (must be a valid UUID v4in GNS3) will be used for the import.

Release historyRelease notifications RSS feed

0.8

0.7

0.6

0.5

0.3

0.2

0.1

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Files for gns3-proxy, version 0.8
Filename, sizeFile typePython versionUpload dateHashes
Filename, size gns3_proxy-0.8-py3-none-any.whl (32.6 kB) File type Wheel Python version py3 Upload dateHashes
Filename, size gns3-proxy-0.8.tar.gz (22.4 kB) File type Source Python version None Upload dateHashes
Close

Hashes for gns3_proxy-0.8-py3-none-any.whl

Hashes for gns3_proxy-0.8-py3-none-any.whl
AlgorithmHash digest
SHA256507e4889b8934ee34422a4270e22266b3e814142aa98a3aa82c16570b0c911a5
MD55055bfe8ca46b84ae0c8957e1a2114ea
BLAKE2-256438e56b7bbd0006c083858f922975d9983388ec9d6ba6d9162db01c25ca496bb
CloseGns3

Python Gns3

Hashes for gns3-proxy-0.8.tar.gz

Hashes for gns3-proxy-0.8.tar.gz
AlgorithmHash digest
SHA256d2cbe8631f20d9c4ef82686aca7a3d7185dc5926de8b4ad4558f174f472ff4a1
MD546264056c2e5848d1df3767458420f59
BLAKE2-256dd0a02a07989c3a2865c874132ecb2b5a0f881c53295d549715adc846eba102a