Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Dostęp do LK zza maskarady - zewnętrzne dynamiczne IP
#1
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

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
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

Kod PHP:
<?php
error_reporting
(E_ALL);
parse_str($_SERVER['QUERY_STRING']);

function 
get($url$x){
        
$ch curl_init();
        
curl_setopt($chCURLOPT_URL,$url);
        
curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
        
curl_setopt($chCURLOPT_USERPWD,$x);
        
curl_setopt($chCURLOPT_HTTPAUTHCURLAUTH_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($p0strpos($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 Smile 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
Odpowiedz


Skocz do:


Użytkownicy przeglądający ten wątek: 1 gości