mirror of
https://github.com/Justuser3310/jetwork.git
synced 2025-02-08 09:47:36 +00:00
Compare commits
No commits in common. "cca41a5d7a25aea36bf4b70020d273e4e90430e6" and "d6559d0e6812399cca6e9d70aa4d2b1d909d3270" have entirely different histories.
cca41a5d7a
...
d6559d0e68
22
README.md
22
README.md
@ -13,7 +13,6 @@ https://t.me/justuser31_chat
|
|||||||
|
|
||||||
## 📋 Содержание
|
## 📋 Содержание
|
||||||
- ▶️ Начало работы
|
- ▶️ Начало работы
|
||||||
- 🌐 Установка на сервер
|
|
||||||
- 🔓 Открытие любых портов
|
- 🔓 Открытие любых портов
|
||||||
- 📎 Публикация статичного сайта
|
- 📎 Публикация статичного сайта
|
||||||
- 📎 Публикация динамичного сайта
|
- 📎 Публикация динамичного сайта
|
||||||
@ -33,8 +32,6 @@ 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>
|
||||||
@ -44,25 +41,6 @@ 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.
Before Width: | Height: | Size: 103 KiB |
@ -1,67 +0,0 @@
|
|||||||
.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;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,5 +0,0 @@
|
|||||||
{
|
|
||||||
"ports": [
|
|
||||||
25128
|
|
||||||
]
|
|
||||||
}
|
|
81
interface.py
81
interface.py
@ -1,60 +1,43 @@
|
|||||||
from dash import Dash, dcc, html, Input, Output, callback
|
import streamlit as st
|
||||||
app = Dash(__name__, title='Jetwork', update_title=None)
|
import streamlit.components.v1 as components
|
||||||
|
|
||||||
from db import *
|
|
||||||
from os import walk
|
from os import walk
|
||||||
|
from time import sleep
|
||||||
|
from db import *
|
||||||
|
|
||||||
app.layout = html.Div([ html.Div([
|
# Получаем порт со входа
|
||||||
|
from sys import argv
|
||||||
html.Div([], id='our_port', className='our_port'),
|
our_port = argv[1]
|
||||||
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'),
|
# Боковая панель
|
||||||
Input('interval-component', 'n_intervals'))
|
with ph.container():
|
||||||
def update_servers(n):
|
# Столбцы для элементов
|
||||||
res = []
|
sidebar, space, main = st.columns([60, 10, 90])
|
||||||
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')
|
|
||||||
|
|
||||||
res = []
|
with sidebar:
|
||||||
for i in next(walk('cached/'), (None, None, []))[1]:
|
st.success(f"Ваш порт: {our_port}")
|
||||||
res.append(html.Div([i], className='sites_elem'))
|
|
||||||
return res
|
|
||||||
|
|
||||||
# Обновление доступных сайтов в поиске
|
conf = read()
|
||||||
@callback(Output('search', 'options'),
|
if 'ports' in conf:
|
||||||
Input('interval-component', 'n_intervals'))
|
ports = conf['ports']
|
||||||
def update_search(n):
|
for i in ports:
|
||||||
res = []
|
st.warning(f"{i}")
|
||||||
for i in next(walk('cached/'), (None, None, []))[1]:
|
|
||||||
res.append(i)
|
|
||||||
return res
|
|
||||||
|
|
||||||
#app.run(debug=True, port = 5555)
|
with main:
|
||||||
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()
|
||||||
|
29
main.py
29
main.py
@ -8,41 +8,35 @@ 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)
|
||||||
@ -55,10 +49,11 @@ def main():
|
|||||||
updater = Thread(target = update_demon, args=(serv_port,))
|
updater = Thread(target = update_demon, args=(serv_port,))
|
||||||
updater.start()
|
updater.start()
|
||||||
|
|
||||||
|
# !!! ИДЁТ ПЕРЕРАБОТКА !!!
|
||||||
# Стартуем интерфейс
|
# Стартуем интерфейс
|
||||||
system('python interface.py')
|
#system(f"python -m streamlit run --server.address=127.0.0.1 interface.py {serv_port}")
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == "__main__":
|
||||||
# Запускаем главный процесс, чтобы потом легко убить его
|
# Запускаем главный процесс, чтобы потом легко убить его
|
||||||
p = Process(target=main)
|
p = Process(target=main)
|
||||||
p.start()
|
p.start()
|
||||||
|
@ -36,12 +36,9 @@ def port_gen(st = 25000, end = 25200):
|
|||||||
return port
|
return port
|
||||||
|
|
||||||
def server_http():
|
def server_http():
|
||||||
run = True
|
while 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)
|
||||||
@ -125,7 +122,7 @@ def recv(s, data_out):
|
|||||||
data_out.put(data)
|
data_out.put(data)
|
||||||
|
|
||||||
# op = operation
|
# op = operation
|
||||||
def client(port, op = "ping", host = 'bore.pub'):
|
def client(port, op = "ping", host = 'jetwork.404.mn'):
|
||||||
# Если порт не определён
|
# Если порт не определён
|
||||||
if not port:
|
if not port:
|
||||||
return None
|
return None
|
||||||
|
@ -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(25300, 25500)
|
dest = port_gen(7000, 9000)
|
||||||
|
|
||||||
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 bore.pub --port {dest}")
|
system(f"./bore local {port} --to jetwork.404.mn --port {dest}")
|
||||||
elif name == "nt":
|
elif name == "nt":
|
||||||
system(f"bore.exe local {port} --to bore.pub --port {dest}")
|
system(f"bore.exe local {port} --to jetwork.404.mn --port {dest}")
|
||||||
else:
|
else:
|
||||||
print("Увы, вероятно Ваша ОС не поддерживается.")
|
print("Увы, вероятно Ваша ОС не поддерживается.")
|
||||||
print("Завершение работы...")
|
print("Завершение работы...")
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
cryptography
|
cryptography
|
||||||
requests
|
requests
|
||||||
tqdm
|
tqdm
|
||||||
dash
|
streamlit
|
||||||
|
28
setup.py
28
setup.py
@ -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")
|
||||||
|
|
||||||
# TODO
|
print("Максимальный размер для кэшированных файлов. (в гигабайтах)")
|
||||||
#print("Максимальный размер для кэшированных файлов. (в гигабайтах)")
|
print("Укажите 0 для отключения ограничения.")
|
||||||
#print("Укажите 0 для отключения ограничения.")
|
max = input(">> ")
|
||||||
#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
srv_main.py
81
srv_main.py
@ -1,81 +0,0 @@
|
|||||||
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,8 +0,0 @@
|
|||||||
#
|
|
||||||
# Установка/проверка статуса завершения
|
|
||||||
#
|
|
||||||
|
|
||||||
import os
|
|
||||||
|
|
||||||
if not os.path.exists('status'):
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user