diff --git a/.env b/.env deleted file mode 100644 index ca10588..0000000 --- a/.env +++ /dev/null @@ -1,2 +0,0 @@ -# Set version of program -VERSION=0.1.0 diff --git a/.gitignore b/.gitignore index 0667445..5d24f22 100644 --- a/.gitignore +++ b/.gitignore @@ -1,43 +1,5 @@ -# ---> Lua -# Compiled Lua sources -luac.out - -# luarocks build files -*.src.rock -*.zip -*.tar.gz - -# Object files -*.o -*.os -*.ko -*.obj -*.elf - -# Precompiled Headers -*.gch -*.pch - -# Libraries -*.lib -*.a -*.la -*.lo -*.def -*.exp - -# Shared objects (inc. Windows DLLs) -*.dll -*.so -*.so.* -*.dylib - -# Executables -*.exe -*.out -*.app -*.i*86 -*.x86_64 -*.hex - +# Ignore user file +sage.txt +# Added by cargo +/target diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..7116db2 --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,16 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "owo-colors" +version = "4.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "caff54706df99d2a78a5a4e3455ff45448d81ef1bb63c22cd14052ca0e993a3f" + +[[package]] +name = "sage" +version = "0.1.0" +dependencies = [ + "owo-colors", +] diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..8b61a68 --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,14 @@ +[package] +name = "sage" +version = "0.1.0" +edition = "2021" + +[dependencies] +owo-colors = "4.0.0" + +[profile.release] +strip = true # Strip debug symbols +opt-level = "z" # Optimise for size +lto = true # Enable link type optimisation +codegen-units = 1 # Reduce parallel code generation units +panic = "abort" # Abort on panic! diff --git a/Justfile b/Justfile deleted file mode 100644 index f4fa834..0000000 --- a/Justfile +++ /dev/null @@ -1,4 +0,0 @@ -set dotenv-load - -figure: - julia figure/main.jl diff --git a/README.md b/README.md index 14e85b2..2b4c426 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,7 @@ # sage -A collection of cybersecurity-related utilities for my personal use. \ No newline at end of file +A collection of utilities for home labs. + +## Dependencies +You'll need the following installed for `sage` to function properly +- netcat (`nc`) diff --git a/figure/main.jl b/figure/main.jl deleted file mode 100644 index c3ccf8c..0000000 --- a/figure/main.jl +++ /dev/null @@ -1,5 +0,0 @@ -version = ENV["VERSION"] - -printstyled("\nfigure $version\n", color=:cyan, bold=true); -println("A collection of cybersecurity-related utilities for my personal use."); -printstyled("This is the part of the program responsible for data visualisation and manipulation.\n", bold=true); diff --git a/go.mod b/go.mod deleted file mode 100644 index 4792259..0000000 --- a/go.mod +++ /dev/null @@ -1,30 +0,0 @@ -module github.com/devraza/sage - -go 1.21.7 - -require ( - github.com/charmbracelet/bubbles v0.18.0 - github.com/charmbracelet/bubbletea v0.25.0 - github.com/charmbracelet/lipgloss v0.10.0 - github.com/prometheus-community/pro-bing v0.4.0 -) - -require ( - github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect - github.com/containerd/console v1.0.4-0.20230313162750-1ae8d489ac81 // indirect - github.com/google/uuid v1.6.0 // indirect - github.com/lucasb-eyer/go-colorful v1.2.0 // indirect - github.com/mattn/go-isatty v0.0.18 // indirect - github.com/mattn/go-localereader v0.0.1 // indirect - github.com/mattn/go-runewidth v0.0.15 // indirect - github.com/muesli/ansi v0.0.0-20211018074035-2e021307bc4b // indirect - github.com/muesli/cancelreader v0.2.2 // indirect - github.com/muesli/reflow v0.3.0 // indirect - github.com/muesli/termenv v0.15.2 // indirect - github.com/rivo/uniseg v0.4.7 // indirect - golang.org/x/net v0.21.0 // indirect - golang.org/x/sync v0.6.0 // indirect - golang.org/x/sys v0.17.0 // indirect - golang.org/x/term v0.17.0 // indirect - golang.org/x/text v0.14.0 // indirect -) diff --git a/go.sum b/go.sum deleted file mode 100644 index 803f247..0000000 --- a/go.sum +++ /dev/null @@ -1,47 +0,0 @@ -github.com/aymanbagabas/go-osc52/v2 v2.0.1 h1:HwpRHbFMcZLEVr42D4p7XBqjyuxQH5SMiErDT4WkJ2k= -github.com/aymanbagabas/go-osc52/v2 v2.0.1/go.mod h1:uYgXzlJ7ZpABp8OJ+exZzJJhRNQ2ASbcXHWsFqH8hp8= -github.com/charmbracelet/bubbles v0.18.0 h1:PYv1A036luoBGroX6VWjQIE9Syf2Wby2oOl/39KLfy0= -github.com/charmbracelet/bubbles v0.18.0/go.mod h1:08qhZhtIwzgrtBjAcJnij1t1H0ZRjwHyGsy6AL11PSw= -github.com/charmbracelet/bubbletea v0.25.0 h1:bAfwk7jRz7FKFl9RzlIULPkStffg5k6pNt5dywy4TcM= -github.com/charmbracelet/bubbletea v0.25.0/go.mod h1:EN3QDR1T5ZdWmdfDzYcqOCAps45+QIJbLOBxmVNWNNg= -github.com/charmbracelet/lipgloss v0.10.0 h1:KWeXFSexGcfahHX+54URiZGkBFazf70JNMtwg/AFW3s= -github.com/charmbracelet/lipgloss v0.10.0/go.mod h1:Wig9DSfvANsxqkRsqj6x87irdy123SR4dOXlKa91ciE= -github.com/containerd/console v1.0.4-0.20230313162750-1ae8d489ac81 h1:q2hJAaP1k2wIvVRd/hEHD7lacgqrCPS+k8g1MndzfWY= -github.com/containerd/console v1.0.4-0.20230313162750-1ae8d489ac81/go.mod h1:YynlIjWYF8myEu6sdkwKIvGQq+cOckRm6So2avqoYAk= -github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= -github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY= -github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= -github.com/mattn/go-isatty v0.0.18 h1:DOKFKCQ7FNG2L1rbrmstDN4QVRdS89Nkh85u68Uwp98= -github.com/mattn/go-isatty v0.0.18/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= -github.com/mattn/go-localereader v0.0.1 h1:ygSAOl7ZXTx4RdPYinUpg6W99U8jWvWi9Ye2JC/oIi4= -github.com/mattn/go-localereader v0.0.1/go.mod h1:8fBrzywKY7BI3czFoHkuzRoWE9C+EiG4R1k4Cjx5p88= -github.com/mattn/go-runewidth v0.0.12/go.mod h1:RAqKPSqVFrSLVXbA8x7dzmKdmGzieGRCM46jaSJTDAk= -github.com/mattn/go-runewidth v0.0.15 h1:UNAjwbU9l54TA3KzvqLGxwWjHmMgBUVhBiTjelZgg3U= -github.com/mattn/go-runewidth v0.0.15/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= -github.com/muesli/ansi v0.0.0-20211018074035-2e021307bc4b h1:1XF24mVaiu7u+CFywTdcDo2ie1pzzhwjt6RHqzpMU34= -github.com/muesli/ansi v0.0.0-20211018074035-2e021307bc4b/go.mod h1:fQuZ0gauxyBcmsdE3ZT4NasjaRdxmbCS0jRHsrWu3Ho= -github.com/muesli/cancelreader v0.2.2 h1:3I4Kt4BQjOR54NavqnDogx/MIoWBFa0StPA8ELUXHmA= -github.com/muesli/cancelreader v0.2.2/go.mod h1:3XuTXfFS2VjM+HTLZY9Ak0l6eUKfijIfMUZ4EgX0QYo= -github.com/muesli/reflow v0.3.0 h1:IFsN6K9NfGtjeggFP+68I4chLZV2yIKsXJFNZ+eWh6s= -github.com/muesli/reflow v0.3.0/go.mod h1:pbwTDkVPibjO2kyvBQRBxTWEEGDGq0FlB1BIKtnHY/8= -github.com/muesli/termenv v0.15.2 h1:GohcuySI0QmI3wN8Ok9PtKGkgkFIk7y6Vpb5PvrY+Wo= -github.com/muesli/termenv v0.15.2/go.mod h1:Epx+iuz8sNs7mNKhxzH4fWXGNpZwUaJKRS1noLXviQ8= -github.com/prometheus-community/pro-bing v0.4.0 h1:YMbv+i08gQz97OZZBwLyvmmQEEzyfyrrjEaAchdy3R4= -github.com/prometheus-community/pro-bing v0.4.0/go.mod h1:b7wRYZtCcPmt4Sz319BykUU241rWLe1VFXyiyWK/dH4= -github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= -github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= -github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= -github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= -golang.org/x/net v0.21.0 h1:AQyQV4dYCvJ7vGmJyKki9+PBdyvhkSd8EIx/qb0AYv4= -golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= -golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ= -golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= -golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.17.0 h1:25cE3gD+tdBA7lp7QfhuV+rJiE9YXTcS3VG1SqssI/Y= -golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/term v0.17.0 h1:mkTF7LCd6WGJNL3K1Ad7kwxNfYAW6a8a8QqtMblp/4U= -golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= -golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= -golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= diff --git a/main.go b/main.go deleted file mode 100644 index ec56933..0000000 --- a/main.go +++ /dev/null @@ -1,92 +0,0 @@ -package main - -import ( - "fmt" - "os" - "strings" - - "github.com/charmbracelet/bubbles/help" - "github.com/charmbracelet/bubbles/key" - tea "github.com/charmbracelet/bubbletea" - "github.com/charmbracelet/lipgloss" - - "github.com/prometheus-community/pro-bing" -) - -var ( - checkMark = lipgloss.NewStyle().Foreground(lipgloss.Color("42")).SetString("✓") - docStyle = lipgloss.NewStyle().Margin(1, 2) - titleStyle = lipgloss.NewStyle().Bold(true) -) - -type keyMap struct { - Quit key.Binding -} - -func (k keyMap) ShortHelp() []key.Binding { - return []key.Binding{k.Quit} -} -func (k keyMap) FullHelp() [][]key.Binding { - return [][]key.Binding{ - {k.Quit}, - } -} - -var keys = keyMap{ - Quit: key.NewBinding( - key.WithKeys("q", "esc", "ctrl+c"), - key.WithHelp("q", "quit"), - ), -} - -type model struct { - keys keyMap - help help.Model - addresses []string -} - -func initialModel() model { - return model{ - keys: keys, - help: help.New(), - addresses: []string{"100.64.0.1", "100.64.0.2"}, - } -} - -func (m model) Init() tea.Cmd { - return nil -} - -func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) { - switch msg := msg.(type) { - case tea.KeyMsg: - switch { - case key.Matches(msg, m.keys.Quit): - return m, tea.Quit - } - } - return m, nil -} - -func (m model) View() string { - s := titleStyle.Render("Pinging hosts...") + strings.Repeat("\n", 2) - for _, address := range m.addresses { - _, err := probing.NewPinger(fmt.Sprintf("%s", address)) - if err != nil { - panic(err) - } else { - s += fmt.Sprintf("%s %s\n", checkMark, address) - } - } - - helpView := m.help.View(m.keys) - return docStyle.Render(s + "\n" + helpView) -} - -func main() { - p := tea.NewProgram(initialModel()) - if _, err := p.Run(); err != nil { - fmt.Printf("Error: %v", err) - os.Exit(1) - } -} diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..8c667c0 --- /dev/null +++ b/src/main.rs @@ -0,0 +1,28 @@ +use owo_colors::OwoColorize; +use std::fs; +use std::process::Command; + +fn main() -> std::io::Result<()> { + let file: Vec = fs::read_to_string("sage.txt") + .unwrap() + .lines() + .map(String::from) + .collect(); + + for port in &file[1..file.len()] { + let netcat = Command::new("nc") + .arg("-vz") + .arg(&file[0]) + .arg(port) + .output()?; + + let splitted = std::str::from_utf8(&netcat.stderr[..]).unwrap().split(" "); + let collection = &splitted.collect::>(); + if collection[7] == "succeeded!\n" { + println!("{} {} {}", "✓".green(), collection[2], collection[4]); + } else { + println!("{} {} {}", "✕".red(), collection[3], collection[6]); + } + } + Ok(()) +}