Skip to content

Commit

Permalink
+ favicon, asterisk, reload
Browse files Browse the repository at this point in the history
  • Loading branch information
vikilpet committed Jan 3, 2022
1 parent ed08ee1 commit 2b93202
Show file tree
Hide file tree
Showing 5 changed files with 160 additions and 152 deletions.
20 changes: 10 additions & 10 deletions readme.md
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -21,28 +21,28 @@ 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

### 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
Expand Down
10 changes: 5 additions & 5 deletions readme_ru.md
Original file line number Diff line number Diff line change
@@ -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-адреса *плохих* запросов попадают в *чёрный список*.

Предполагается, что для белого списка вы что-то разрешаете, а для чёрного списка блокируются любые входящие соединения.

Expand All @@ -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.

Expand All @@ -42,7 +42,7 @@
### Только для Windows:
В консоли:
- нажмите «i» для вывода списка IP адресов;
- «u» для вывода списка пользователей
- «u» для вывода списка пользователей (истекшие даты помечены звездочкой);
- «s» для перезагрузки настроек, чтобы добавлять пользователей без перезапуска.

## Помощь проекту
Expand Down
99 changes: 45 additions & 54 deletions resources.py
Original file line number Diff line number Diff line change
Expand Up @@ -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={}<br>there is some error
pass_expired={}<br>your passcode expired: {}
access_error=You are logged in as «{}»<br>There is some error :(
pass_expired=You are logged in as «{}»<br>Your passcode has expired: {}
pass_unknown=Unknown passcode
ban=Ban
perm_timeout_text={}<br>access granted
temp_timeout_text={}<br>access granted for 8 hours
perm_timeout_text=You are logged in as «{}»<br>Access granted
temp_timeout_text=You are logged in as «{}»<br>Access granted for 8 hours
'''

dictionary_ru='''\
Expand All @@ -27,64 +29,53 @@ def __init__(self, language:str='en'):
time_capt=Время
ip_capt=Ваш IP
page_title=Тук-тук
access_error={}<br>какая-то ошибка
pass_expired={}<br>ваш код доступа уже истёк: {}
access_error=Вы вошли как «{}»<br>Какая-то ошибка включения доступа :(
pass_expired=Вы вошли как «{}»<br>Ваш код доступа уже истёк: {}
pass_unknown=Неизвестный код доступа
ban=Бан
perm_timeout_text={}<br>доступ открыт
temp_timeout_text={}<br>доступ открыт на 8 часов
perm_timeout_text=Вы вошли как «{}»<br>Доступ открыт
temp_timeout_text=Вы вошли как «{}»<br>Доступ открыт на 8 часов
'''

HTML_DEFAULT = '''\
<!DOCTYPE html>
<html>
<head>
<meta charset='utf-8'>
<title>{page_title}</title>
<meta http-equiv=Content-Type content="text/html;charset=UTF-8">
<style>
.popup {{
position: fixed;
top: 10%;
left: 50%;
}}
.popup .wrapper {{
max-width: 500px;
font-size: xx-large;
text-align: center;
position: relative;
left: -50%;
/*popup-styles*/
background-color: #eee;
padding: 20px;
border-radius: 10px;
}}
html {{
background-color: #ddd;
}}
hr {{
color: #fff;
}}
.info {{
/*text-align: left;*/
font-family: Verdana;
line-height: 150%;
font-size: small;
color: #999;
}}
</style>
</head>
<style>
html, body {{
height: 100%;
background-color: #eee;
font-family: "Times New Roman", serif;
font-size: 3vh;
margin: 0 2vw 0 2vw;
}}
.container {{
display: flex;
justify-content: center;
height: 100%;
flex-direction: column;
align-items: center;
gap: 0vh;
}}
.info {{
font-size: .5rem;
font-family: Verdana, Geneva, Tahoma, sans-serif;
}}
/* Fix hr inside flex: */
hr {{ width: min(46vh, 50vw); }}
</style>
</head>
<body>
<div class="popup">
<div class="wrapper">
{message}<br>
<hr>
<p class="info">
{ip_capt}: {ip_address}<br>
{time_capt}: {timestamp}<br>
<a href="https://github.com/vikilpet/">© https://github.com/vikilpet/</a><br>
</p>
</div>
<div class='container'>
{message}
<hr>
<p class='info'>
{ip_capt}: {ip_address}
<br>{time_capt}: {timestamp}
<br><a href='https://github.com/vikilpet/''>© https://github.com/vikilpet/</a>
<br>
</p>
</div>
</body>
</html>
'''
3 changes: 0 additions & 3 deletions rosapi.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
# source: https://wiki.mikrotik.com/wiki/Manual:API_Python3
import sys, binascii, socket, select, ssl
import hashlib

Expand Down Expand Up @@ -174,7 +173,6 @@ def main():
passw = ""
secure = True
port = 0

if len(sys.argv) == 4:
user = sys.argv[2]
passw = sys.argv[3]
Expand Down Expand Up @@ -203,7 +201,6 @@ def main():
if sys.stdin in r[0]:
l = sys.stdin.readline()
l = l[:-1]

if l == '':
apiros.writeSentence(inputsentence)
inputsentence = []
Expand Down
Loading

0 comments on commit 2b93202

Please sign in to comment.