Skip to content

An interactive python shell to test the network using external commands as well as some python libs for network performance

License

GPL-3.0, GPL-3.0 licenses found

Licenses found

GPL-3.0
LICENSE
GPL-3.0
COPYING
Notifications You must be signed in to change notification settings

packetpunter/pyNetTestShell

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

93 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

pyNetTestShell

An interactive python shell to test the network using external commands as well as some python libs for network performance

Requirements

None - this is pure Python3, thanks to the likes of the tabulate project and the icmplib project.

Behavior

The app is interactive, and upon launch, creates a new logfile. It must be run as root.

The logfile is located in /network-testing/$YEAR/$MONTH/$DAY and the file is named according to data in Config.py, using the timestamp for the file name.

The log directory and files are 777 owned by root.

Once in, you have a shell where you can run pings, traceroutes, speedtests with logging to disk and some analysis.

Usage

This application has two ways to interface with it. There is an interactive shell called TestShell, and an execuble-like mode for one-off testing via the module "Flamegrid"

Interactive Shell

NOTE: This requires Sudo privileges on Linux/MacOS, but not Windows. Both of the following work to run the shell:

sudo python3 -m TestShell
sudo TestShell
Sample Output
Welcome to the Network Tester Interactive v2.2.1 app to test your network!

Type ? to list commands.
 For questions, please contact the administrator who granted you this access.


net_test> set targets 1.1.1.1 4.4.4.4 reddit.com
net_test> run route ping speed
HISTORY LOGGER::: route Result 
╒════╀═══════════════════════╀════════════════════╀═════════╀═══════════════════╀════════════════╀═════════════════════════════════════╕
β”‚    β”‚ TS                    β”‚ SRC                β”‚ DST     β”‚   Route_AvgJitter β”‚   Route_AvgRtt β”‚ Route_HighestLossHop                β”‚
β•žβ•β•β•β•β•ͺ═══════════════════════β•ͺ════════════════════β•ͺ═════════β•ͺ═══════════════════β•ͺ════════════════β•ͺ═════════════════════════════════════║
β”‚ TS β”‚ 2023/10/11-T-12:32:55 β”‚ self via 10.1.10.1 β”‚ 1.1.1.1 β”‚          0.102231 β”‚        1.51931 β”‚ 71.25.197.110 responded in 20.769ms β”‚
β•˜β•β•β•β•β•§β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•§β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•§β•β•β•β•β•β•β•β•β•β•§β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•§β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•§β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•›
HISTORY LOGGER::: route Result 
╒════╀═══════════════════════╀════════════════════╀═════════╀═══════════════════╀════════════════╀═════════════════════════════════════╕
β”‚    β”‚ TS                    β”‚ SRC                β”‚ DST     β”‚   Route_AvgJitter β”‚   Route_AvgRtt β”‚ Route_HighestLossHop                β”‚
β•žβ•β•β•β•β•ͺ═══════════════════════β•ͺ════════════════════β•ͺ═════════β•ͺ═══════════════════β•ͺ════════════════β•ͺ═════════════════════════════════════║
β”‚ TS β”‚ 2023/10/11-T-12:33:39 β”‚ self via 10.1.10.1 β”‚ 4.4.4.4 β”‚            0.0465 β”‚         1.8574 β”‚ 96.110.37.233 responded in 21.475ms β”‚
β•˜β•β•β•β•β•§β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•§β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•§β•β•β•β•β•β•β•β•β•β•§β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•§β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•§β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•›
HISTORY LOGGER::: route Result 
╒════╀═══════════════════════╀════════════════════╀════════════╀═══════════════════╀════════════════╀════════════════════════════════════╕
β”‚    β”‚ TS                    β”‚ SRC                β”‚ DST        β”‚   Route_AvgJitter β”‚   Route_AvgRtt β”‚ Route_HighestLossHop               β”‚
β•žβ•β•β•β•β•ͺ═══════════════════════β•ͺ════════════════════β•ͺ════════════β•ͺ═══════════════════β•ͺ════════════════β•ͺ════════════════════════════════════║
β”‚ TS β”‚ 2023/10/11-T-12:33:43 β”‚ self via 10.1.10.1 β”‚ reddit.com β”‚         0.0338333 β”‚        1.56475 β”‚ 96.110.39.110 responded in 24.46ms β”‚
β•˜β•β•β•β•β•§β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•§β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•§β•β•β•β•β•β•β•β•β•β•β•β•β•§β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•§β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•§β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•›
HISTORY LOGGER::: ping Result 
╒════╀═══════════════════════╀═══════╀═════════╀════════════╀════════════╀════════════╀════════════════╕
β”‚    β”‚ TS                    β”‚ SRC   β”‚ DST     β”‚   Ping_Avg β”‚   Ping_Max β”‚   Ping_Min β”‚   Ping_PctLoss β”‚
β•žβ•β•β•β•β•ͺ═══════════════════════β•ͺ═══════β•ͺ═════════β•ͺ════════════β•ͺ════════════β•ͺ════════════β•ͺ════════════════║
β”‚ TS β”‚ 2023/10/11-T-12:34:30 β”‚ self  β”‚ 1.1.1.1 β”‚     19.908 β”‚     22.093 β”‚     18.868 β”‚              0 β”‚
β•˜β•β•β•β•β•§β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•§β•β•β•β•β•β•β•β•§β•β•β•β•β•β•β•β•β•β•§β•β•β•β•β•β•β•β•β•β•β•β•β•§β•β•β•β•β•β•β•β•β•β•β•β•β•§β•β•β•β•β•β•β•β•β•β•β•β•β•§β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•›
HISTORY LOGGER::: ping Result 
╒════╀═══════════════════════╀═══════╀═════════╀════════════╀════════════╀════════════╀════════════════╕
β”‚    β”‚ TS                    β”‚ SRC   β”‚ DST     β”‚   Ping_Avg β”‚   Ping_Max β”‚   Ping_Min β”‚   Ping_PctLoss β”‚
β•žβ•β•β•β•β•ͺ═══════════════════════β•ͺ═══════β•ͺ═════════β•ͺ════════════β•ͺ════════════β•ͺ════════════β•ͺ════════════════║
β”‚ TS β”‚ 2023/10/11-T-12:34:30 β”‚ self  β”‚ 4.4.4.4 β”‚          0 β”‚          0 β”‚          0 β”‚              1 β”‚
β•˜β•β•β•β•β•§β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•§β•β•β•β•β•β•β•β•§β•β•β•β•β•β•β•β•β•β•§β•β•β•β•β•β•β•β•β•β•β•β•β•§β•β•β•β•β•β•β•β•β•β•β•β•β•§β•β•β•β•β•β•β•β•β•β•β•β•β•§β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•›
HISTORY LOGGER::: ping Result 
╒════╀═══════════════════════╀═══════╀════════════╀════════════╀════════════╀════════════╀════════════════╕
β”‚    β”‚ TS                    β”‚ SRC   β”‚ DST        β”‚   Ping_Avg β”‚   Ping_Max β”‚   Ping_Min β”‚   Ping_PctLoss β”‚
β•žβ•β•β•β•β•ͺ═══════════════════════β•ͺ═══════β•ͺ════════════β•ͺ════════════β•ͺ════════════β•ͺ════════════β•ͺ════════════════║
β”‚ TS β”‚ 2023/10/11-T-12:34:30 β”‚ self  β”‚ reddit.com β”‚     19.547 β”‚     24.884 β”‚     18.315 β”‚              0 β”‚
β•˜β•β•β•β•β•§β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•§β•β•β•β•β•β•β•β•§β•β•β•β•β•β•β•β•β•β•β•β•β•§β•β•β•β•β•β•β•β•β•β•β•β•β•§β•β•β•β•β•β•β•β•β•β•β•β•β•§β•β•β•β•β•β•β•β•β•β•β•β•β•§β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•›
HISTORY LOGGER::: speed Result 
╒════╀═══════════════════════╀═══════╀══════════════════════╀══════════════╀════════════╀═════════════════╀═════════════════════════════════════════════════╕
β”‚    β”‚ TS                    β”‚ SRC   β”‚ DST                  β”‚ Speed_Down   β”‚ Speed_Up   β”‚ Speed_Latency   β”‚ Speed_URL                                       β”‚
β•žβ•β•β•β•β•ͺ═══════════════════════β•ͺ═══════β•ͺ══════════════════════β•ͺ══════════════β•ͺ════════════β•ͺ═════════════════β•ͺ═════════════════════════════════════════════════║
β”‚ TS β”‚ 2023/10/11-T-12:34:30 β”‚ self  β”‚ NextLight Denver, CO β”‚ 649.0 Mbps   β”‚ 26.0 Mbps  β”‚ 23.9 ms         β”‚ http://www.speedtest.net/result/15364450453.png β”‚
β•˜β•β•β•β•β•§β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•§β•β•β•β•β•β•β•β•§β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•§β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•§β•β•β•β•β•β•β•β•β•β•β•β•β•§β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•§β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•›
net_test> exit
 *** Goodbye ***!

One Off Execution

python3 -m Flamegrid test route 1.1.1.1

Sample Log File

β•˜β•β•β•β•β•§β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•§β•β•β•β•β•β•β•β•§β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•§β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•§β•β•β•β•β•β•β•β•β•β•β•β•β•§β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•§β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•›
2023/10/11 12:32|  route Result 
╒════╀═══════════════════════╀════════════════════╀═════════╀═══════════════════╀════════════════╀═════════════════════════════════════╕
β”‚    β”‚ TS                    β”‚ SRC                β”‚ DST     β”‚   Route_AvgJitter β”‚   Route_AvgRtt β”‚ Route_HighestLossHop                β”‚
β•žβ•β•β•β•β•ͺ═══════════════════════β•ͺ════════════════════β•ͺ═════════β•ͺ═══════════════════β•ͺ════════════════β•ͺ═════════════════════════════════════║
β”‚ TS β”‚ 2023/10/11-T-12:32:55 β”‚ self via 10.1.10.1 β”‚ 1.1.1.1 β”‚          0.102231 β”‚        1.51931 β”‚ 71.25.197.110 responded in 20.769ms β”‚
β•˜β•β•β•β•β•§β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•§β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•§β•β•β•β•β•β•β•β•β•β•§β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•§β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•§β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•›
2023/10/11 12:32|  route Result 
╒════╀═══════════════════════╀════════════════════╀═════════╀═══════════════════╀════════════════╀═════════════════════════════════════╕
β”‚    β”‚ TS                    β”‚ SRC                β”‚ DST     β”‚   Route_AvgJitter β”‚   Route_AvgRtt β”‚ Route_HighestLossHop                β”‚
β•žβ•β•β•β•β•ͺ═══════════════════════β•ͺ════════════════════β•ͺ═════════β•ͺ═══════════════════β•ͺ════════════════β•ͺ═════════════════════════════════════║
β”‚ TS β”‚ 2023/10/11-T-12:33:39 β”‚ self via 10.1.10.1 β”‚ 4.4.4.4 β”‚            0.0465 β”‚         1.8574 β”‚ 96.110.37.233 responded in 21.475ms β”‚
β•˜β•β•β•β•β•§β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•§β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•§β•β•β•β•β•β•β•β•β•β•§β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•§β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•§β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•›
2023/10/11 12:32|  route Result 
╒════╀═══════════════════════╀════════════════════╀════════════╀═══════════════════╀════════════════╀════════════════════════════════════╕
β”‚    β”‚ TS                    β”‚ SRC                β”‚ DST        β”‚   Route_AvgJitter β”‚   Route_AvgRtt β”‚ Route_HighestLossHop               β”‚
β•žβ•β•β•β•β•ͺ═══════════════════════β•ͺ════════════════════β•ͺ════════════β•ͺ═══════════════════β•ͺ════════════════β•ͺ════════════════════════════════════║
β”‚ TS β”‚ 2023/10/11-T-12:33:43 β”‚ self via 10.1.10.1 β”‚ reddit.com β”‚         0.0338333 β”‚        1.56475 β”‚ 96.110.39.110 responded in 24.46ms β”‚
β•˜β•β•β•β•β•§β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•§β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•§β•β•β•β•β•β•β•β•β•β•β•β•β•§β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•§β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•§β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•›
2023/10/11 12:33|  ping Result 
╒════╀═══════════════════════╀═══════╀═════════╀════════════╀════════════╀════════════╀════════════════╕
β”‚    β”‚ TS                    β”‚ SRC   β”‚ DST     β”‚   Ping_Avg β”‚   Ping_Max β”‚   Ping_Min β”‚   Ping_PctLoss β”‚
β•žβ•β•β•β•β•ͺ═══════════════════════β•ͺ═══════β•ͺ═════════β•ͺ════════════β•ͺ════════════β•ͺ════════════β•ͺ════════════════║
β”‚ TS β”‚ 2023/10/11-T-12:34:30 β”‚ self  β”‚ 1.1.1.1 β”‚     19.908 β”‚     22.093 β”‚     18.868 β”‚              0 β”‚
β•˜β•β•β•β•β•§β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•§β•β•β•β•β•β•β•β•§β•β•β•β•β•β•β•β•β•β•§β•β•β•β•β•β•β•β•β•β•β•β•β•§β•β•β•β•β•β•β•β•β•β•β•β•β•§β•β•β•β•β•β•β•β•β•β•β•β•β•§β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•›
2023/10/11 12:33|  ping Result 
╒════╀═══════════════════════╀═══════╀═════════╀════════════╀════════════╀════════════╀════════════════╕
β”‚    β”‚ TS                    β”‚ SRC   β”‚ DST     β”‚   Ping_Avg β”‚   Ping_Max β”‚   Ping_Min β”‚   Ping_PctLoss β”‚
β•žβ•β•β•β•β•ͺ═══════════════════════β•ͺ═══════β•ͺ═════════β•ͺ════════════β•ͺ════════════β•ͺ════════════β•ͺ════════════════║
β”‚ TS β”‚ 2023/10/11-T-12:34:30 β”‚ self  β”‚ 4.4.4.4 β”‚          0 β”‚          0 β”‚          0 β”‚              1 β”‚
β•˜β•β•β•β•β•§β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•§β•β•β•β•β•β•β•β•§β•β•β•β•β•β•β•β•β•β•§β•β•β•β•β•β•β•β•β•β•β•β•β•§β•β•β•β•β•β•β•β•β•β•β•β•β•§β•β•β•β•β•β•β•β•β•β•β•β•β•§β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•›
2023/10/11 12:33|  ping Result 
╒════╀═══════════════════════╀═══════╀════════════╀════════════╀════════════╀════════════╀════════════════╕
β”‚    β”‚ TS                    β”‚ SRC   β”‚ DST        β”‚   Ping_Avg β”‚   Ping_Max β”‚   Ping_Min β”‚   Ping_PctLoss β”‚
β•žβ•β•β•β•β•ͺ═══════════════════════β•ͺ═══════β•ͺ════════════β•ͺ════════════β•ͺ════════════β•ͺ════════════β•ͺ════════════════║
β”‚ TS β”‚ 2023/10/11-T-12:34:30 β”‚ self  β”‚ reddit.com β”‚     19.547 β”‚     24.884 β”‚     18.315 β”‚              0 β”‚
β•˜β•β•β•β•β•§β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•§β•β•β•β•β•β•β•β•§β•β•β•β•β•β•β•β•β•β•β•β•β•§β•β•β•β•β•β•β•β•β•β•β•β•β•§β•β•β•β•β•β•β•β•β•β•β•β•β•§β•β•β•β•β•β•β•β•β•β•β•β•β•§β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•›
2023/10/11 12:34|  speed Result 
╒════╀═══════════════════════╀═══════╀══════════════════════╀══════════════╀════════════╀═════════════════╀═════════════════════════════════════════════════╕
β”‚    β”‚ TS                    β”‚ SRC   β”‚ DST                  β”‚ Speed_Down   β”‚ Speed_Up   β”‚ Speed_Latency   β”‚ Speed_URL                                       β”‚
β•žβ•β•β•β•β•ͺ═══════════════════════β•ͺ═══════β•ͺ══════════════════════β•ͺ══════════════β•ͺ════════════β•ͺ═════════════════β•ͺ═════════════════════════════════════════════════║
β”‚ TS β”‚ 2023/10/11-T-12:34:30 β”‚ self  β”‚ NextLight Denver, CO β”‚ 649.0 Mbps   β”‚ 26.0 Mbps  β”‚ 23.9 ms         β”‚ http://www.speedtest.net/result/15364450453.png β”‚
β•˜β•β•β•β•β•§β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•§β•β•β•β•β•β•β•β•§β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•§β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•§β•β•β•β•β•β•β•β•β•β•β•β•β•§β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•§β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•›

About

An interactive python shell to test the network using external commands as well as some python libs for network performance

Resources

License

GPL-3.0, GPL-3.0 licenses found

Licenses found

GPL-3.0
LICENSE
GPL-3.0
COPYING

Stars

Watchers

Forks

Packages

No packages published