From 2b93202789589af5f63799d0e3399ca8adc2eddc Mon Sep 17 00:00:00 2001 From: vikilpet <1+github@4592.ru> Date: Mon, 3 Jan 2022 17:35:57 +0400 Subject: [PATCH] + favicon, asterisk, reload --- readme.md | 20 +++--- readme_ru.md | 10 +-- resources.py | 99 ++++++++++++-------------- rosapi.py | 3 - web_knocking.py | 180 +++++++++++++++++++++++++++--------------------- 5 files changed, 160 insertions(+), 152 deletions(-) diff --git a/readme.md b/readme.md index f257b7f..c706a7b 100644 --- a/readme.md +++ b/readme.md @@ -1,18 +1,18 @@ # Web Knocking for MikroTik -![Screenshot](https://user-images.githubusercontent.com/43970835/79135939-3172f900-7dc1-11ea-9d26-f923c47d47b6.png) +![Screenshot](https://user-images.githubusercontent.com/43970835/147935163-3ebf16d4-4c15-44b2-baec-ee854becf0e4.png) ## How it works -It is a web server written in Python. +This is a web server written in Python -If the request is *good*, then the IP address of the person who made the request is added to the white list on the router. IP addresses of *bad* requests are blacklisted. +If the request is *good* then the IP address of the person who made the request is added to the white list on the router. IP addresses of *bad* requests are blacklisted. -It is assumed that for the white list you allow something, and for the black list you block any incoming connections. +It is assumed that for the white list you allow something and for the black list you block any incoming connections. -For users who need to connect outside the office, we give a link like this: +For users who need to connect outside the office we give a link like this: http://100.100.1.2:2020/access_SeCrEtCoDe -It is possible to support other vendors' devices with help of [netmiko](https://github.com/ktbyers/netmiko), but I only have MikroTik-s. +It is possible to support other vendors' devices with help of [netmiko](https://github.com/ktbyers/netmiko) but I only have MikroTik-s. ## Setup ### Option 1: EXE @@ -21,20 +21,20 @@ Just download the archive from the release page. ### Option 2: Python **Requirements:** Python 3.8; Windows 7+ -It should also work on Linux, but I haven't checked. +It should also work on Linux but I haven't checked. Just download the project. No third-party dependencies. ## Usage Change settings in *settings.ini* to your own. -It is highly recommended to add your IP address to *safe_hosts* to avoid blacklisting during testing. +It is highly recommended to add your IP address to *safe_hosts* to avoid blacklisting during testing. From the addresses on the *safe_hosts* list you can request a reload of the settings with url `http://ip:port/reload` Forward a port in the router from the settings to the computer where Web Knocking is running. Enable API access on the router from this computer (*ip services - api-ssl* or *api*). -For white and black lists, make the rules according to your needs. For example, forward port 80 for white list on MikroTik: +For white and black lists make the rules according to your needs. For example forward port 80 for white list on MikroTik: /ip firewall nat add src-address-list=white_list in-interface=WAN \ dst-port=80 action=dst-nat to-addresses=192.168.0.10 to-ports=80 @@ -42,7 +42,7 @@ For white and black lists, make the rules according to your needs. For example, ### Only in Windows: In console window: - press «i» to print out IP addresses; -- «u» to print out users; +- «u» to print out users (expired dates are marked with an asterisk); - «s» to reload settings so you can add new users without restart. ## Support project diff --git a/readme_ru.md b/readme_ru.md index a3e3782..882a91b 100644 --- a/readme_ru.md +++ b/readme_ru.md @@ -1,10 +1,10 @@ # Web Knocking для MikroTik -![Screenshot](https://user-images.githubusercontent.com/43970835/79136043-63845b00-7dc1-11ea-9e30-6d4e011c2bc3.png) +![Screenshot](https://user-images.githubusercontent.com/43970835/147935163-3ebf16d4-4c15-44b2-baec-ee854becf0e4.png) ## Как это работает Это веб-сервер на Python. -Если запрос *правильный*, то IP-адрес того, кто сделал этот запрос, добавляется в белый список на маршрутизаторе. IP-адреса *плохих* запросов попадают в чёрный список. +Если запрос *правильный*, то IP-адрес того, кто сделал этот запрос, добавляется в *белый список* на маршрутизаторе. IP-адреса *плохих* запросов попадают в *чёрный список*. Предполагается, что для белого списка вы что-то разрешаете, а для чёрного списка блокируются любые входящие соединения. @@ -26,9 +26,9 @@ Просто скачайте [проект](https://github.com/vikilpet/Web-Knocking/releases). Без зависимостей от нестандартных модулей. ## Использование -Измените настройки в settings.ini на свои. +Измените настройки в *settings.ini* на свои. -Очень рекомендуется добавить свой IP адрес в *safe_hosts*, чтобы при тестировании не занести себя в чёрный список. +Очень рекомендуется добавить свой IP адрес в *safe_hosts*, чтобы при тестировании не занести себя в чёрный список. С адресов из списка *safe_hosts* можно выполнить запрос на перезагрузку настроек вида `http://ip:port/reload` Пробросьте в маршрутизаторе порт из настроек на компьютер, на котором запущен Web Knocking. @@ -42,7 +42,7 @@ ### Только для Windows: В консоли: - нажмите «i» для вывода списка IP адресов; -- «u» для вывода списка пользователей +- «u» для вывода списка пользователей (истекшие даты помечены звездочкой); - «s» для перезагрузки настроек, чтобы добавлять пользователей без перезапуска. ## Помощь проекту diff --git a/resources.py b/resources.py index 5d4e19a..b50f5a1 100644 --- a/resources.py +++ b/resources.py @@ -7,18 +7,20 @@ def __init__(self, language:str='en'): di = dict(v.split('=') for v in lang_str[:-1].split('\n')) self.__dict__.update(di) +FAVICON = b'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x10\x00\x00\x00\x10\x08\x03\x00\x00\x00(-\x0fS\x00\x00\x00\x81PLTE\xff\xff\xff\x83\x83\x82\xa7\xa7\xa6~\x7f}qrp\xfd\xfd\xfc\xe1\xe1\xe0\xde\xde\xde\xba\xba\xb9\x95\x95\x94\x88\x89\x87\xf1\xf1\xf1\xeb\xeb\xea\xe6\xe6\xe5\xd1\xd1\xd1\xce\xce\xcd\x92\x92\x91xxw\xf9\xf9\xf9\xf5\xf5\xf4\xee\xee\xed\xe3\xe3\xe3\xca\xca\xc9\xc2\xc2\xc1\xbc\xbc\xbb\xb2\xb2\xb1\xad\xad\xac\x9f\x9f\x9e\x9a\x9a\x99\x97\x97\x97\x8e\x8e\x8c||{zzyijh\xa4\xa4\xa3\xa3\xa3\xa3\xa1\xa1\xa1\x80\x80\x80ddb^^\\UUTRRPAA@n\xda.\xc4\x00\x00\x00\x92IDAT\x18\xd3}\x8fG\x0e\xc30\x0c\x04IIVq\x97{/\xe9\xc9\xff\x1f\x18\xc92\x82\xf8\xe2\x05\x88\xe5\xcc\x81\x00\xe1,\xaa?r\x92\xd6\xc3A\xa4\xf1]\x15n\x8d\x14I|l\xe9\xd8H\x8b\x01NE\xcfb\xc06\xe1\xdcp\xaeC \xd9+\xe0\x0c\\F\x01\xd1\xa7\xac\x9e\xe9\xd08\xb1\x00\x84\xbe^K\x90\xc4\tj\xc6\x17\xa8\xe6\xeb\xb2\xb1\x87V\xc0\xa5\xf6\xe4~d6S\x81x\xd0nu\x02\x83\xad\x98d\x93\x13!\xcdmu\xef\x18\xf6D\x14\xc9M\x13\xef\xef\x8bL\xf0\x1f~\x01c\xeb\x06\x95_\x99Rn\x00\x00\x00\x00IEND\xaeB`\x82' + dictionary_en='''\ homepage=Homepage: https://github.com/vikilpet/ -donate=Donate, if you like it: https://www.paypal.me/vikil +donate=Donate if you like it: https://www.paypal.me/vikil time_capt=Time ip_capt=Your IP page_title=Knock-knock -access_error={}
there is some error -pass_expired={}
your passcode expired: {} +access_error=You are logged in as «{}»
There is some error :( +pass_expired=You are logged in as «{}»
Your passcode has expired: {} pass_unknown=Unknown passcode ban=Ban -perm_timeout_text={}
access granted -temp_timeout_text={}
access granted for 8 hours +perm_timeout_text=You are logged in as «{}»
Access granted +temp_timeout_text=You are logged in as «{}»
Access granted for 8 hours ''' dictionary_ru='''\ @@ -27,64 +29,53 @@ def __init__(self, language:str='en'): time_capt=Время ip_capt=Ваш IP page_title=Тук-тук -access_error={}
какая-то ошибка -pass_expired={}
ваш код доступа уже истёк: {} +access_error=Вы вошли как «{}»
Какая-то ошибка включения доступа :( +pass_expired=Вы вошли как «{}»
Ваш код доступа уже истёк: {} pass_unknown=Неизвестный код доступа ban=Бан -perm_timeout_text={}
доступ открыт -temp_timeout_text={}
доступ открыт на 8 часов +perm_timeout_text=Вы вошли как «{}»
Доступ открыт +temp_timeout_text=Вы вошли как «{}»
Доступ открыт на 8 часов ''' HTML_DEFAULT = '''\ - + {page_title} - - - + + -