From 09729acee76d0f0d07eb55aea7e1f11966d47bf0 Mon Sep 17 00:00:00 2001 From: aceberg <1502200+aceberg@users.noreply.github.com> Date: Mon, 22 Aug 2022 19:57:30 +0700 Subject: [PATCH] Multiple interfaces --- .github/workflows/docker-publish.yml | 2 +- .gitignore | 1 + README.md | 1 + src/arpscan.go | 29 +++++++++++++++++++--------- src/main.go | 7 +++---- 5 files changed, 26 insertions(+), 14 deletions(-) diff --git a/.github/workflows/docker-publish.yml b/.github/workflows/docker-publish.yml index 26c9c22..9926bc7 100644 --- a/.github/workflows/docker-publish.yml +++ b/.github/workflows/docker-publish.yml @@ -14,7 +14,7 @@ on: env: IMAGE_NAME: watchyourlan - TAGS: latest, v0.5 + TAGS: latest, v0.6 jobs: diff --git a/.gitignore b/.gitignore index f88264d..5969e24 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ # Ignore local data data/ watchyourlan +tmp/ \ No newline at end of file diff --git a/README.md b/README.md index b2a01d0..7e2249d 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,7 @@ # WatchYourLAN [![Docker](https://github.com/aceberg/WatchYourLAN/actions/workflows/docker-publish.yml/badge.svg)](https://github.com/aceberg/WatchYourLAN/actions/workflows/docker-publish.yml) +![Docker Image Size (latest semver)](https://img.shields.io/docker/image-size/aceberg/watchyourlan) Local network IP scanner with web gui diff --git a/src/arpscan.go b/src/arpscan.go index 6b025ef..9af3c45 100644 --- a/src/arpscan.go +++ b/src/arpscan.go @@ -2,7 +2,6 @@ package main import ( // "fmt" - "log" "os/exec" "strings" "time" @@ -11,11 +10,10 @@ import ( func scan_iface(iface string) (string) { cmd, err := exec.Command("arp-scan", "-glNx", "-I", iface).Output() if err != nil { - log.Fatal(err) + return string("") + } else { + return string(cmd) } - - return string(cmd) - // fmt.Println(text) } func parse_output(text string) ([]Host) { @@ -24,10 +22,10 @@ func parse_output(text string) ([]Host) { perString := strings.Split(text, "\n") currentTime := time.Now() - for _, v := range perString { - if v != "" { + for _, host := range perString { + if host != "" { var oneHost Host - p := strings.Split(v, " ") + p := strings.Split(host, " ") oneHost.Ip = p[0] oneHost.Mac = p[1] oneHost.Hw = p[2] @@ -38,5 +36,18 @@ func parse_output(text string) ([]Host) { } return foundHosts - // fmt.Println(foundHosts) +} + +func arp_scan() ([]Host) { + var text string + var foundHosts = []Host{} + + perString := strings.Split(AppConfig.Iface, " ") + + for _, iface := range perString { + text = scan_iface(iface) + foundHosts = append(foundHosts, parse_output(text)...) + } + + return foundHosts } \ No newline at end of file diff --git a/src/main.go b/src/main.go index 8b2f9fb..c9fe77f 100644 --- a/src/main.go +++ b/src/main.go @@ -27,9 +27,9 @@ type Conf struct { var AppConfig Conf var AllHosts []Host -func scan() { +func scan_and_compare() { for { - foundHosts := parse_output(scan_iface(AppConfig.Iface)) + foundHosts := arp_scan() dbHosts := db_select() db_setnow() hosts_compare(foundHosts, dbHosts) @@ -45,8 +45,7 @@ func main() { AppConfig = get_config("./data/config") db_create() - // fmt.Println("Timeout: ", AppConfig.Timeout) - go scan() + go scan_and_compare() webgui() } \ No newline at end of file