а почему ?))) это будет только в моей библии, и не всплывет в сети, чужой код всегда интересный, а вот материалы не нужны, их в сети и так наверное найти можно…
все таки не укладывается это у меня в голове… на есп32 нет же браузера, и если его нет, то это не значит же что я не могу добавить флаг, который активирую, и работа сервера запуститься так же как я бы сделал это через графический интерфейс на пк…
далее проделав работу сервер отдает информацию вывода другому серверу, который уже грузится в браузер, и выводится там…
и тот который грузится в браузер, не имеет полного доступа к первому серверу, на котором уже есть дополнительные скрипты….
не понимаю чего я не учитываю… вроде это реально сделать кодом…
Если динамически генерить на странице фейковые ссылки движком, то можно навсегда запустить wget и он не скачает сайт, где есть бесконечное количество входящих ссылок. HTML bomb практиковалось достаточно давно.
Браузер - это программа, которая визуализирует на экран все то, что отдал ему сервер. Он получает html, грузит картинки, скачивает javascript (тут вам надо почитать про html). Потом собирает Dom, цепляет в нужные места javascript, рендит картинки и т.д.
Иди почитай сначала книжки, а потом берись реализовывать, поскольку понимания у тебя пока 0.
кажется еще и так не работает… с 2 серверами, происходят тоже ошибки, слишком много скриптов там… стоит хоть что то подправить в коде (например отправку данных) и он перестает работать…
хотя более легкий сервер вроде как скрывает часть js скриптов, придется с помощью слабоумия и отваги, решать ошибку за ошибкой перенося код на апк…
если скрипты сложные, с использованием локальных библиотек, не работает… или я просто не знаю как сделать, как бы сказал один персонаж, блин блинский)))
наверное не надо терять время, и идти пыхтеть над апк))) всем спс за ответы и идеи
Сделай javascript, который тащит данные в div отдельно с url, которого нет в тексте самого javascript, а он формируется путем сложения строк, а потом обращается. Тем самым ты при сохранении исходного текста html спрячешь url куда обращается javascript. При переносе на другой сервер код автоматически перестанет работать. Но при сохранении в браузере содержимого страницы данные все равно будут полностью присутствовать. Тем самым ты затруднишь простым способом перенос сервера.
Можно вообще генерить javascript при его скачивании браузером. Например вставить url с адресом сервера и адресом клиента в исходный текст с последующей проверкой.
это запуск html на адресе 192.168.4.1 а нахождение скриптов по другим адресам 192.168.4.100 например, которых нет в основной странице ?)))
только пример с портом… однако у меня не хватает знаний как реализовать, так как много слишком скриптов и библиотек в них, что код работает только целиком, и если я переношу его, или вношу изменения, основной функционал его падает)))
#include <WiFi.h>
#include <WebServer.h>
WebServer server80(80); // Основной сервер на порту 80
WebServer server8080(8080); // Скрытый сервер на порту 8080
void setup() {
Serial.begin(115200);
// Режим AP
WiFi.softAP("ESP32_Secret", "pass123");
Serial.println(WiFi.softAPIP()); // 192.168.4.1
// ===== ОСНОВНОЙ СЕРВЕР (порт 80) =====
server80.on("/", []() {
String html = R"raw(
<!DOCTYPE html>
<html>
<body>
<h1>Защищенная система</h1>
<div id="content">Поиск компонентов...</div>
<script>
// В HTML нет ссылок на скрипты!
// Скрипт "спрятан" на другом порту
const currentHost = window.location.hostname; // 192.168.4.1
const secretPort = 8080; // Порт не указан в HTML явно, но вычисляется
// Собираем URL скрытого скрипта
const scriptUrl = `http://${currentHost}:${secretPort}/secret.js`;
fetch(scriptUrl)
.then(res => res.text())
.then(code => {
eval(code); // Выполняем скрытый скрипт
})
.catch(err => {
document.getElementById('content').innerHTML = 'Ошибка: ' + err;
});
</script>
</body>
</html>
)raw";
server80.send(200, "text/html", html);
});
// ===== СКРЫТЫЙ СЕРВЕР (порт 8080) =====
server8080.on("/secret.js", []() {
String js = R"raw(
// Этот скрипт загружен с порта 8080
// На порту 80 его нет!
async function loadRealData() {
// Дополнительная проверка - обращаемся к API на порту 80
const response = await fetch('http://' + window.location.hostname + '/api/data');
const data = await response.json();
document.getElementById('content').innerHTML =
'<h2>✅ Секретные данные</h2>' +
'<p>Температура: ' + data.temp + '°C</p>' +
'<p>Влажность: ' + data.hum + '%</p>';
}
loadRealData();
)raw";
server8080.send(200, "application/javascript", js);
});
// API для данных (тоже на порту 80)
server80.on("/api/data", []() {
String json = "{\"temp\":23.5,\"hum\":65}";
server80.send(200, "application/json", json);
});
server80.begin();
server8080.begin();
}
void loop() {
server80.handleClient();
server8080.handleClient();
}
и надеяться вроде не стоит что не поймут как это работает, и что не скачают скрипты… самое лучшее это внедрить обмен информацией с закрытом сервером без доступа к скриптам))) который только результат работы пришлет, если вы умеете без проблем править такой код)))
мне наверное лучше 100% вариант, через приложение, потому что там я понимаю чуть больше что я делаю, чем тут)))
он много чего пишет… в основном что он создает страницу из функции-кода, вы про это ?
только так я вообще не знаю как реализовать…
так я хоть могу разместить js скрипты, и понимаю где они, и могу указать куда к ним обращаться для того что бы функционал полностью работал…
хотя и тут из за того что я запустил html со скриптами не сразу, в одном месте, с загрузкой и выполнением этого всего в браузере, логика программы ломается…
еще говорит можно так писать код на любом языке…)))
но смог бы я переписать библиотеки которые на js скрипте, я бы не стал так морочится с их сокрытием…
тут я использую чужие, и мне надо еще их и скрыть))) а чуть вмешиваясь в чужой код, программа перестает работать…
А чего тут знать-то? Берете любой, самый простой пример веб-сервера из самой простой библиотеки для сетевого шилда. И видите там именно CGI подход. Там нет никаких HTML файлов. Там сервер получает запрос и прямо здесь в скетче фигачит ответ, состоящий из заголовка и html-кода. Это оно и есть. Страницы он генерит каждый раз разные, они идут браузеру, а саму программу, которая генерит (собственно сервер) хрен выкачаешь.
В этом простейшем примере никак не разбираются параметры, но кто Вам мешает разбирать? Более того, снаружи это может даже выглядеть как то, что у Вас там куча HTML- файлов. На самом деле там ничего нет, просто программа сервера может смотреть что у неё попросили и генерить нужный ответ (например, попросили sensors.htm - она генерит страницу со значениями датчиков, попросили contacts.htm – она генерит страницу контактов, попросили что-то непонятное – генерит ошибку 404, а реально таких файлов нет и никогда не было).
Вот это оно и есть CGI - это когда некая программа на сервере на лету генерирует ответ на запрос и отсылает браузеру.
попробую позже почитать и вникнуть, спс, но свою задачу попробую решить через апк приложение)))
думал есть какой то легкий способ сделать иначе, но программа готовая на html раз за разом перестает работать, если я ей даже файлы для обработки отправляю через какого то посредника в виде сайта, вообще чуть пытаясь изменить функционал сайта html, он перестает работать)))
Что значит, “портировать”.
На ПК или сервере, работающем под какой-то ОС, это просто программа (exe файл), которая принимает данные со стандартного устройства ввода и выдает - на стандартное устройство вывода. Пишется как обычная консольная утилита.
Если же устройство работает без ОС или, по крайней мере, без ФС, эти действия (прием и выдачу нужных данных) должна обеспечивать сама прошивка.
Что здесь можно “портировать”?
Если консольная exe программа и прошивка устройства пишутся на одном и том же языке программирования (например, Си), то “портировать” вообще нечего. Код переносится один в один.