From 311b0cd444e35758075b6e8387d84afcf1dba010 Mon Sep 17 00:00:00 2001 From: serega404 Date: Sun, 8 May 2022 19:02:26 +0300 Subject: [PATCH] Update README --- README.md | 69 ++++++++++++++++++++++++++++++++++++++++++++++- README_RU.md | 69 +++++++++++++++++++++++++++++++++++++++++++++++ img/telegram.png | Bin 0 -> 14373 bytes 3 files changed, 137 insertions(+), 1 deletion(-) create mode 100644 README_RU.md create mode 100644 img/telegram.png diff --git a/README.md b/README.md index 772fcd2..2f3f775 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,69 @@ -# multiwan_informer +# MultiWan Informer +![License](https://img.shields.io/github/license/serega404/multiwan_informer?style=flat-square&) +![Go version](https://img.shields.io/github/go-mod/go-version/serega404/multiwan_informer?style=flat-square&filename=src%2Fgo.mod) +Language: [Русский](./README_RU.md) | [English](./README.md) + +## What is this program created for? + +This program is necessary for those who need to monitor the connection of several network cards to the network, thanks to this program you will be able to receive notifications in a telegram about disconnecting or connecting the network on a specific network card + +## Screenshots + +![Telegram chat](./img/telegram.png) + +## How to setup? + +To get started, download the assembly artifact, then configure your parameters in the file ```conf.json``` + +### Settings + +
+Config example + +```json +{ + "Interfaces": [{ + "DisplayName": "MainInterface", + "IpOrInterfaceName": "enp2s0" + }, + { + "DisplayName": "SecondInterface", + "IpOrInterfaceName": "enp3s0" + } + ], + "WaitTimeSec": 15, + "PingAddr": "8.8.8.8", + "TelegramConf": { + "BotToken": "Token", + "ChatID": "Id", + "SendSilent": "false" + } +} +``` + +
+ +### Parameters + +* `Interfaces` - array of interfaces + * `DisplayName` - the name displayed in the notification + * `IpOrInterfaceName` - name or own IP address of the interface +* `WaitTimeSec` - how many seconds to wait before a successful ping (```ping -w```) +* `PingAddr` - which address to ping (preferably not a domain) +* `TelegramConf` - bot telegram settings + * `BotToken` - Telegram bot token ([get it here](https://t.me/BotFather/)) + * `ChatID` - telegram user/channel id ([get it here](https://t.me/chatIDrobot/)) +* `SendSilent` - send messages without sound + +## Build + +Build for your system: +
```build -o ./build/multiwan_informer ./src/main.go``` + +Build example for MIPS: +
```GOOS=linux GOARCH=mipsle GOMIPS=softfloat go build -o ./build/multiwan_informer_mipsle ./src/main.go``` + +## License + +Distributed under the GPLv3 License. See [`LICENSE`](./LICENSE) for more information. diff --git a/README_RU.md b/README_RU.md new file mode 100644 index 0000000..e26c414 --- /dev/null +++ b/README_RU.md @@ -0,0 +1,69 @@ +# MultiWan Informer +![License](https://img.shields.io/github/license/serega404/multiwan_informer?style=flat-square&) +![Go version](https://img.shields.io/github/go-mod/go-version/serega404/multiwan_informer?style=flat-square&filename=src%2Fgo.mod) + +Язык: [Русский](./README_RU.md) | [English](./README.md) + +## Для чего эта программа? + +Эта программа нужна тем кому нужно следить за подключением к сети нескольких сетевых карт, благодаря этой программе вы сможете получать уведомления в телеграмме об отключении или подключении сети на определённой сетевой карте + +## Скриншоты + +![Telegram chat](./img/telegram.png) + +## Как настроить? + +Для начала скачайте артефакт сборки, после чего настрйоки ваши параметры в файле ```conf.json``` + +### Настройка + +
+Пример конфига + +```json +{ + "Interfaces": [{ + "DisplayName": "MainInterface", + "IpOrInterfaceName": "enp2s0" + }, + { + "DisplayName": "SecondInterface", + "IpOrInterfaceName": "enp3s0" + } + ], + "WaitTimeSec": 15, + "PingAddr": "8.8.8.8", + "TelegramConf": { + "BotToken": "Token", + "ChatID": "Id", + "SendSilent": "false" + } +} +``` + +
+ +### Параметры + +* `Interfaces` - массив интерфейсов + * `DisplayName` - имя выводимое в уведомлении + * `IpOrInterfaceName` - название или собственный IP адрес интерфейса +* `WaitTimeSec` - сколько секунд ожидать до успешного пинга (```ping -w```) +* `PingAddr` - какой адрес пинговать (желательно не домен) +* `TelegramConf` - настройки телеграм бота + * `BotToken` - токен бота ([получать тут](https://t.me/BotFather/)) + * `ChatID` - id чата ([узнать](https://t.me/chatIDrobot/)) +* `SendSilent` - отправлять сообщения без звука + +## Сборка + +Cборка под вашу систему: +
```build -o ./build/multiwan_informer ./src/main.go``` + +Пример сборки под MIPS: +
```GOOS=linux GOARCH=mipsle GOMIPS=softfloat go build -o ./build/multiwan_informer_mipsle ./src/main.go``` + +## Лицензия + +Распространяется под лицензией GPLv3. Дополнительные сведения смотрите в файле [`LICENSE`](./LICENSE). diff --git a/img/telegram.png b/img/telegram.png new file mode 100644 index 0000000000000000000000000000000000000000..defea4ec6130001ceea4d837905d59894438da29 GIT binary patch literal 14373 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 literal 0 HcmV?d00001