02-21-2022, 02:25 AM
(Ten post był ostatnio modyfikowany: 02-21-2022, 06:47 AM przez stAch.
Powód edycji: poprawki kodu
)
W Wenecji trwa maskarada .... ja też postanowiłem podzielić się swoją maskaradą ....
Potrzebą matką wynalazku... właśnie straciłem możliwość darmowego stałego zewnętrznego IP a dostęp do HttpApi sterowników nadal potrzebny.
Darmowe DDns nie oferują w większości przypadków obsługi portów innych niż 80 nie mówiąc o portach powyżej 1000 sic!
Co potrzebujemy: serwer linux z php apache <4.0 gdzieś w sieci gdzie zrobimy własny prosty ddns i przekierowania do portów na których mamy LK wypuszczone w routerze, oraz zabezpieczymy też wszystko dostępem na hasło. Spokojnie może to być darmowa usługa nawet z limitami transferu
Na początek na serwerze utwórz jakiś katalog (na serwerach są katalogi nie foldery) np LK i umieść w nim plik .htaccess
hasła dostępu do LK zapiszemy w pliku .htpasswrd UWAGA Wszystkie pliki php w tym katalogu będą zabezpieczone tymi hasłami
dodatkowo stworzymy naszą bazę danych czyli pusty plik .myip - w nim będziemy trzymać nasze aktualne IP
a całością pokieruje nam plik index.php
Używanie banalnie proste...
najpierw cyklicznie z dowolnego urządzenia w tej samej sieci co LK lub niego samego (klient http) odpytaj adres.serwera/LK/index.php by zapisać twój zewnętrzny ip, ja zalecam ustawić w routerze niestandardowy adres ddns
Upewnij się że twoje sterowniki nie pracują po HTTPS http://adres.serwera/r/port przekieruje nas na adres http://user:password@zewnętrzeIP:port
przykład: mamy na porcie 8100 udostępniony LK a nasze powyższe pliki w domenie moj.dom.pl w katalogu LK wklepanie w przeglądarkę adresu moj.dom.pl/LK/8100 otworzy nam stronę startową sterownika hasłem którego używamy do zalogowania możemy też pobrać jsona lub xml lub każda inną komendę używając przełącznika R
http://moj.dom.pl/LK/R/8100/json/all.json umożliwi pobranie /json/all.json lub http://moj.dom.pl/LK/R/8100/outs.cgi?out0=1&out2=1&outnn=3 wykona nam działania na przekaźnikach
Jeśli masz różne hasła na rożnych LK zaleca się je ustawić na takie same by uniknąć monitów logowania - logujesz się raz i masz dostęp do wszystkich urządzeń z pominięciem logowania pomimo zmiennego IP
może komuś się przyda będąc w Wenecji by sprawdzić temperaturę w kraju
Potrzebą matką wynalazku... właśnie straciłem możliwość darmowego stałego zewnętrznego IP a dostęp do HttpApi sterowników nadal potrzebny.
Darmowe DDns nie oferują w większości przypadków obsługi portów innych niż 80 nie mówiąc o portach powyżej 1000 sic!
Co potrzebujemy: serwer linux z php apache <4.0 gdzieś w sieci gdzie zrobimy własny prosty ddns i przekierowania do portów na których mamy LK wypuszczone w routerze, oraz zabezpieczymy też wszystko dostępem na hasło. Spokojnie może to być darmowa usługa nawet z limitami transferu
Na początek na serwerze utwórz jakiś katalog (na serwerach są katalogi nie foldery) np LK i umieść w nim plik .htaccess
Kod:
AuthName "Alert System"
AuthType Basic
AuthUserFile ".htpasswrd"
<Files "*.php" >
Require valid-user
</Files>
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?$1 [L,QSA]
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]
</IfModule>
hasła dostępu do LK zapiszemy w pliku .htpasswrd UWAGA Wszystkie pliki php w tym katalogu będą zabezpieczone tymi hasłami
Kod:
admin:tajnehaslo
user:1234
a całością pokieruje nam plik index.php
Kod PHP:
<?php
error_reporting(E_ALL);
parse_str($_SERVER['QUERY_STRING']);
function get($url, $x){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERPWD,$x);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
$d = curl_exec($ch);
$i = curl_getinfo($ch);
curl_close($ch);
return $d;
}
$f = '.myip';
$i = file_get_contents($f);
$ip = $_SERVER['REMOTE_ADDR'];
$p = $_SERVER['QUERY_STRING'];
$n = substr($p, 0, strpos($p, "/"));
if(is_numeric($n) OR is_numeric($p)){
header('Location: http://'.$_SERVER['REMOTE_USER'].':'.$_SERVER['PHP_AUTH_PW'].'@'.$i.':'.$p);
} else {
if(strtolower($n) == 'r'){
$p = substr(preg_replace('/&/','?',$p,1),2);
exit( get('http://'.$i.':'.$p, $_SERVER['REMOTE_USER'].':'.$_SERVER['PHP_AUTH_PW']) );
}
if($i != $ip){ file_put_contents($f, $ip); } exit();
}
?>
Używanie banalnie proste...
najpierw cyklicznie z dowolnego urządzenia w tej samej sieci co LK lub niego samego (klient http) odpytaj adres.serwera/LK/index.php by zapisać twój zewnętrzny ip, ja zalecam ustawić w routerze niestandardowy adres ddns
Upewnij się że twoje sterowniki nie pracują po HTTPS http://adres.serwera/r/port przekieruje nas na adres http://user:password@zewnętrzeIP:port
przykład: mamy na porcie 8100 udostępniony LK a nasze powyższe pliki w domenie moj.dom.pl w katalogu LK wklepanie w przeglądarkę adresu moj.dom.pl/LK/8100 otworzy nam stronę startową sterownika hasłem którego używamy do zalogowania możemy też pobrać jsona lub xml lub każda inną komendę używając przełącznika R
http://moj.dom.pl/LK/R/8100/json/all.json umożliwi pobranie /json/all.json lub http://moj.dom.pl/LK/R/8100/outs.cgi?out0=1&out2=1&outnn=3 wykona nam działania na przekaźnikach
Jeśli masz różne hasła na rożnych LK zaleca się je ustawić na takie same by uniknąć monitów logowania - logujesz się raz i masz dostęp do wszystkich urządzeń z pominięciem logowania pomimo zmiennego IP
może komuś się przyda będąc w Wenecji by sprawdzić temperaturę w kraju
e-chata.hyzne.com | LK1 - sterowniki akwarystyki | LK2 - sterowniki ihome | LK3 - niezliczone ilości wersji/nakładek na farmach PV i nie tylko | LK4 - testy bezprzewodowe