Compare commits

..

11 Commits

Author SHA1 Message Date
Justuser cca41a5d7a Update README.md 2024-06-18 11:02:39 +00:00
Justuser 4074b07f15 Update README.md 2024-06-18 11:02:14 +00:00
justuser 2f797096d0 Смена порта 2024-06-18 13:50:15 +03:00
Justuser cd8c321aec Update README.md 2024-06-18 10:47:05 +00:00
justuser 94f7b1a773 Серверная версия main.py 2024-06-18 13:46:22 +03:00
justuser ab84313def up 2024-06-18 13:44:34 +03:00
justuser cec4b07b4a up 2024-06-18 13:39:05 +03:00
justuser 0f35ab55fe Обновление интерфейса, переход на Dash. 2024-06-18 13:36:29 +03:00
justuser dbaded283b up 2024-06-18 10:36:19 +03:00
justuser b559b7b659 Перевод на публичный адрес 2024-06-18 10:33:52 +03:00
justuser a383517634 Небольшие поправки 2024-06-18 10:32:24 +03:00
21 changed files with 273 additions and 64 deletions
+22
View File
@@ -13,6 +13,7 @@ https://t.me/justuser31_chat
## 📋 Содержание ## 📋 Содержание
- ▶️ Начало работы - ▶️ Начало работы
- 🌐 Установка на сервер
- 🔓 Открытие любых портов - 🔓 Открытие любых портов
- 📎 Публикация статичного сайта - 📎 Публикация статичного сайта
- 📎 Публикация динамичного сайта - 📎 Публикация динамичного сайта
@@ -32,6 +33,8 @@ https://t.me/justuser31_chat
3. Установить tar: `sudo apt install tar` 3. Установить tar: `sudo apt install tar`
4. Клонировать репозиторий: `git clone https://github.com/Justuser3310/jetwork.git` 4. Клонировать репозиторий: `git clone https://github.com/Justuser3310/jetwork.git`
5. Запустить setup.py: `cd jetwork && python setup.py` 5. Запустить setup.py: `cd jetwork && python setup.py`
6. Запустить клиент: `python main.py`
7. Зайти на `http://127.0.0.1:5555`
<br> <br>
<br> <br>
@@ -41,6 +44,25 @@ https://t.me/justuser31_chat
2. Установить git: https://git-scm.com/download/win (Windows setup) 2. Установить git: https://git-scm.com/download/win (Windows setup)
3. Клонировать репозиторий: `git clone https://github.com/Justuser3310/jetwork.git` 3. Клонировать репозиторий: `git clone https://github.com/Justuser3310/jetwork.git`
4. Запустить setup.py: `cd jetwork && python setup.py` 4. Запустить setup.py: `cd jetwork && python setup.py`
5. Запустить клиент: `python main.py`
6. Зайти на `http://127.0.0.1:5555`
<br>
<br>
#### 📱 Termux
Следовать инструкции для Linux.
Только заменить `sudo apt` на `pkg` в 1-3 шагах.
<br>
<br>
### 🌐 Начало работы
1. Выполнить шаги в начале работы до 5 включительно (Linux) или 4 (Windows)
2. Запустить серверный клиент: `python srv_main.py`
( Отключён скан портов, чтобы снизить нагрузку и избежать утечки памяти )
3. Зайти на `http://127.0.0.1:5555`
<br> <br>
<br> <br>
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.

After

Width:  |  Height:  |  Size: 103 KiB

+67
View File
@@ -0,0 +1,67 @@
.content {
/*display: flex;*/
justify-content: center;
padding: 3rem;
}
.main {
display: grid;
grid-template-areas:
"our_port search"
"servers sites"
"servers sites";
grid-template-columns: 1fr 2fr;
grid-template-rows: auto auto;
}
.our_port {
grid-area: our_port;
background: #53f453;
align-content: center;
border-radius: 0.4rem;
padding-left: 1rem;
padding-right: 1rem;
margin-right: 0.5rem;
}
.servers {
grid-area: servers;
}
.serv_elem {
background: #fff454;
align-content: center;
border-radius: 0.4rem;
padding-left: 1rem;
min-height: 2.2rem;
margin-top: 0.4rem;
margin-right: 0.5rem;
}
.sites {
grid-area: sites;
}
.sites_elem {
background: #abd4f9;
align-content: center;
border-radius: 0.4rem;
padding-left: 1rem;
min-height: 2.2rem;
margin-top: 0.4rem;
}
.search {
grid-area: search;
}
/* Действия при разрешении телефона */
@media (max-width: 900px) {
.content {
display: flex;
padding: 0;
}
}
Executable
BIN
View File
Binary file not shown.
+5
View File
@@ -0,0 +1,5 @@
{
"ports": [
25128
]
}
+49 -32
View File
@@ -1,43 +1,60 @@
import streamlit as st from dash import Dash, dcc, html, Input, Output, callback
import streamlit.components.v1 as components app = Dash(__name__, title='Jetwork', update_title=None)
from os import walk
from time import sleep
from db import * from db import *
from os import walk
# Получаем порт со входа app.layout = html.Div([ html.Div([
from sys import argv
our_port = argv[1] html.Div([], id='our_port', className='our_port'),
html.Div([], id='servers', className='servers'),
html.Div([], id='sites', className='sites'),
#dcc.Input(className='search', type='search', list=[1,2,3]),
dcc.Dropdown(options=[], id='search', placeholder='Поиск...'),
dcc.Interval(id='interval-component', interval=1*1000, n_intervals=0)
], className='main')], className='content')
st.title('jetwork')
ph = st.empty() # Обновление нашего порта (зачем?)
@callback(Output('our_port', 'children'),
Input('interval-component', 'n_intervals'))
def update_our_port(n):
return f"Ваш порт: {read()['our_port']}"
while True: # Обновление доступных узлов
# Боковая панель @callback(Output('servers', 'children'),
with ph.container(): Input('interval-component', 'n_intervals'))
# Столбцы для элементов def update_servers(n):
sidebar, space, main = st.columns([60, 10, 90]) res = []
for i in read()['ports']:
res.append(html.Div([i], className='serv_elem'))
return res
# Обновление доступных сайтов
@callback(Output('sites', 'children'),
Input('interval-component', 'n_intervals'),
Input('search', 'value'))
def update_sites(n, s_val):
# Если есть элемент в поиске
if s_val:
return html.Div([s_val], className='sites_elem')
with sidebar: res = []
st.success(f"Ваш порт: {our_port}") for i in next(walk('cached/'), (None, None, []))[1]:
res.append(html.Div([i], className='sites_elem'))
return res
conf = read() # Обновление доступных сайтов в поиске
if 'ports' in conf: @callback(Output('search', 'options'),
ports = conf['ports'] Input('interval-component', 'n_intervals'))
for i in ports: def update_search(n):
st.warning(f"{i}") res = []
for i in next(walk('cached/'), (None, None, []))[1]:
res.append(i)
return res
with main: #app.run(debug=True, port = 5555)
# Получаем все сайты app.run(debug=False, port = 5555)
sites = next(walk('cached/'), (None, None, []))[1]
for i in sites:
addr = f"http://127.0.0.1:8000/{i}"
st.info(f"[{i}]({addr})")
sleep(3)
ph.empty()
st.rerun()
+17 -12
View File
@@ -8,35 +8,41 @@ from network import *
from updater import * from updater import *
from proxy import * from proxy import *
from status import * from status import *
from db import *
#
# Здесь общий запуск всех файлов и команд # Здесь общий запуск всех файлов и команд
#
def main(): def main():
# Проверка обновлений # Проверка обновлений
from sys import argv from sys import argv
if len(argv) == 1: if len(argv) == 1:
print("Проверка обновлений...") print('Проверка обновлений...')
system("git pull") system('git pull')
print("Перезагрузка скрипта...") print('Перезагрузка скрипта...')
system("python main.py updated") system('python main.py updated')
exit() exit()
print("\nУспешно перезагружено!") print('\nУспешно перезагружено!')
# Запуск прокси для сервисов # Запуск прокси для сервисов
# проксируем http сервер # проксируем http сервер
http_port = port_gen() http_port = port_gen()
print(f"HTTP: {http_port}") print(f'HTTP: {http_port}')
rp_http = Thread(target = watch_http, args=(http_port,)) rp_http = Thread(target = watch_http, args=(http_port,))
rp_http.start() rp_http.start()
# проксируем сервер обработки запросов # проксируем сервер обработки запросов
serv_port = port_gen() serv_port = port_gen()
print(f"SERV: {serv_port}") print(f'SERV: {serv_port}')
rp_serv = Thread(target = watch_serv, args=(serv_port,)) rp_serv = Thread(target = watch_serv, args=(serv_port,))
rp_serv.start() rp_serv.start()
# Загружаем порт в конфиг
conf = read()
conf['our_port'] = serv_port
write(conf)
# Стартуем сервисы # Стартуем сервисы
# http сервер # http сервер
http = Thread(target = server_http) http = Thread(target = server_http)
@@ -49,11 +55,10 @@ def main():
updater = Thread(target = update_demon, args=(serv_port,)) updater = Thread(target = update_demon, args=(serv_port,))
updater.start() updater.start()
# !!! ИДЁТ ПЕРЕРАБОТКА !!!
# Стартуем интерфейс # Стартуем интерфейс
#system(f"python -m streamlit run --server.address=127.0.0.1 interface.py {serv_port}") system('python interface.py')
if __name__ == "__main__": if __name__ == '__main__':
# Запускаем главный процесс, чтобы потом легко убить его # Запускаем главный процесс, чтобы потом легко убить его
p = Process(target=main) p = Process(target=main)
p.start() p.start()
+5 -2
View File
@@ -36,9 +36,12 @@ def port_gen(st = 25000, end = 25200):
return port return port
def server_http(): def server_http():
while True: run = True
while run == True:
try: try:
os.system("python -m http.server --directory cached") os.system("python -m http.server --directory cached")
except KeyboardInterrupt:
run = False
except Exception as e: except Exception as e:
print("SERVER_HTTP FALLED") print("SERVER_HTTP FALLED")
logging.critical(e, exc_info=True) logging.critical(e, exc_info=True)
@@ -122,7 +125,7 @@ def recv(s, data_out):
data_out.put(data) data_out.put(data)
# op = operation # op = operation
def client(port, op = "ping", host = 'jetwork.404.mn'): def client(port, op = "ping", host = 'bore.pub'):
# Если порт не определён # Если порт не определён
if not port: if not port:
return None return None
+3 -3
View File
@@ -2,15 +2,15 @@ from os import system, name
from network import port_gen from network import port_gen
port = input("Введите порт: ") port = input("Введите порт: ")
dest = port_gen(7000, 9000) dest = port_gen(25300, 25500)
print(f"\nУдалённый ПОРТ: {dest}") print(f"\nУдалённый ПОРТ: {dest}")
print("\n[!] Не закрывайте это окно [!]\n") print("\n[!] Не закрывайте это окно [!]\n")
if name == "posix": if name == "posix":
system(f"./bore local {port} --to jetwork.404.mn --port {dest}") system(f"./bore local {port} --to bore.pub --port {dest}")
elif name == "nt": elif name == "nt":
system(f"bore.exe local {port} --to jetwork.404.mn --port {dest}") system(f"bore.exe local {port} --to bore.pub --port {dest}")
else: else:
print("Увы, вероятно Ваша ОС не поддерживается.") print("Увы, вероятно Ваша ОС не поддерживается.")
print("Завершение работы...") print("Завершение работы...")
+1 -1
View File
@@ -1,4 +1,4 @@
cryptography cryptography
requests requests
tqdm tqdm
streamlit dash
+14 -14
View File
@@ -16,20 +16,20 @@ if name == "posix":
import getpass import getpass
user = getpass.getuser() user = getpass.getuser()
system("mkdir ~/.streamlit") #system("mkdir ~/.streamlit")
with open(f"/home/{user}/.streamlit/credentials.toml", "w") as f: #with open(f"/home/{user}/.streamlit/credentials.toml", "w") as f:
f.write('[general]\nemail = "a@a.a"') # f.write('[general]\nemail = "a@a.a"')
f.close() #f.close()
elif name == "nt": elif name == "nt":
from shutil import unpack_archive as unpack from shutil import unpack_archive as unpack
download("https://github.com/ekzhang/bore/releases/download/v0.5.0/bore-v0.5.0-x86_64-pc-windows-msvc.zip", "bore.zip") download("https://github.com/ekzhang/bore/releases/download/v0.5.0/bore-v0.5.0-x86_64-pc-windows-msvc.zip", "bore.zip")
unpack("bore.zip") unpack("bore.zip")
system("del bore.zip") system("del bore.zip")
system("mkdir C:\\Users\\windows\\.streamlit") #system("mkdir C:\\Users\\windows\\.streamlit")
with open("C:\\Users\\windows\\.streamlit\\credentials.toml", "w") as f: #with open("C:\\Users\\windows\\.streamlit\\credentials.toml", "w") as f:
f.write('[general]\nemail = "a@a.a"') # f.write('[general]\nemail = "a@a.a"')
f.close() #f.close()
else: else:
print("Увы, вероятно Ваша ОС не поддерживается.") print("Увы, вероятно Ваша ОС не поддерживается.")
print("Завершение работы...") print("Завершение работы...")
@@ -40,12 +40,12 @@ system("mkdir cached")
system("mkdir verify") system("mkdir verify")
system("mkdir mysites") system("mkdir mysites")
print("Максимальный размер для кэшированных файлов. (в гигабайтах)") # TODO
print("Укажите 0 для отключения ограничения.") #print("Максимальный размер для кэшированных файлов. (в гигабайтах)")
max = input(">> ") #print("Укажите 0 для отключения ограничения.")
#max = input(">> ")
# Записываем в конфиг # Записываем в конфиг
config["max"] = max #config["max"] = max
write(config) #write(config)
print("\nЧтобы подключится к jetwork выполните: python main.py") print("\nЧтобы подключится к jetwork выполните: python main.py")
+81
View File
@@ -0,0 +1,81 @@
from os import system, name
from time import sleep
from threading import Thread
from multiprocessing import Process
from network import *
from updater import *
from proxy import *
from status import *
from db import *
#
# Здесь общий запуск всех файлов и команд
#
def main():
# Проверка обновлений
from sys import argv
if len(argv) == 1:
print('Проверка обновлений...')
system('git pull')
print('Перезагрузка скрипта...')
system('python main.py updated')
exit()
print('\nУспешно перезагружено!')
# Запуск прокси для сервисов
# проксируем http сервер
http_port = port_gen()
print(f'HTTP: {http_port}')
rp_http = Thread(target = watch_http, args=(http_port,))
rp_http.start()
# проксируем сервер обработки запросов
serv_port = port_gen()
print(f'SERV: {serv_port}')
rp_serv = Thread(target = watch_serv, args=(serv_port,))
rp_serv.start()
# Загружаем порт в конфиг
conf = read()
conf['our_port'] = serv_port
write(conf)
# Стартуем сервисы
# http сервер
http = Thread(target = server_http)
http.start()
# сервер обработки запросов
srv = Thread(target = server, args=(http_port,))
srv.start()
# Стартуем авто-поиск портов и авто-обновление сайтов
#updater = Thread(target = update_demon, args=(serv_port,))
#updater.start()
# Стартуем интерфейс
system('python interface.py')
if __name__ == '__main__':
# Запускаем главный процесс, чтобы потом легко убить его
p = Process(target=main)
p.start()
status_set(True) # Устанавливаем статус, что программа работает
st = status_check()
while st:
try:
st = status_check()
sleep(0.01)
except KeyboardInterrupt:
p.terminate()
exit()
except:
pass
# Когда послан код завершения
p.terminate()
exit()
+1
View File
@@ -0,0 +1 @@
work
+8
View File
@@ -0,0 +1,8 @@
#
# Установка/проверка статуса завершения
#
import os
if not os.path.exists('status'):