Forum: PC-Programmierung [Linux] IP im lokalen Netzwerk mit Zugangsdaten weiterleiten


von Torsten S. (tse)


Lesenswert?

Hallo Forumsgemeinde,

In meinem lokalen Netzwerk habe ich eine Webcam. Die ist 
passwortgeschützt um auch von unterwegs einen Blick nach Hause zu 
werfen. Funktioniert prächtig mit einer Portfreigabe im Router.

Nun kam ein SmartTV ins Haus. Über dessen Browser möchte ich ab und zu 
mal lokal auf die Cam zugreifen. Das funktioniert, leider merkt er sich 
partout nicht die Zugangsdaten. Die jedesmal mit der FB neu eintippen 
ist eine Qual.

Der Trick einfach eine URL z.B. http://user:passwort@webcamip als 
Favorit zu speichern funktioniert leider nicht und wird weggekürzt. Das 
ist eigentlich auch gut so, man könnte böse Sachen Tür und Tor öffnen.

Die Cam einfach ohne Zugangsdaten offen halten würde mir garnicht 
behagen.

Da kam mir eine Idee: Bei mir läuft noch ein Bananapi als NAS-Ersatz. 
Darauf läuft eine Debian Installation die nicht viel zu tun hat.

Deswegen meine Frage an die Netzwerk/Linux-Experten: gibt es ein Tool 
oder geht es sogar mit einigen Einstellungen, das vom TV einfach eine 
URL am Bananapi aufgerufen wird und der dann nichts anderes macht als 
eine Weiterleitung auf die Cam, aber mit Benutzer + Passwort?

Weil auf dem Bananpi schon einige Sachen laufen müsste natürlich ein 
unbenutzter Port übergeben werden, z.B. so:

http://bananapi:8080

vom TV aus die URL aufrufen, dieser einfach Benutzer + Passwort ergänzt 
und dann zu

http://webcam

weiterleitet?

von Tr (Gast)


Lesenswert?

So wie du es beschreibst macht die Kamera wohl Basic oder Digest Auth?
(Bei Ersterem ist es übrigens eine blöde Idee eine Portweiterleitung zu 
erstellen, wenn die Kamera kein SSL kann geht das Passwort im Klartext 
über die Leitung!)

Du könntest den Apache (bzw. einen zusätzlichen VHost) als Proxy 
konfigurieren, der kümmert sich dann um die Anmeldung und leitet dir die 
Seiteninhalte weiter:
http://stackoverflow.com/questions/567814/apache2-reverse-proxy-to-an-end-point-that-requires-basicauth-but-want-to-hide-t

von Torsten S. (tse)


Lesenswert?

Der Link ist sehr interessant und beschreibt genau das gesuchte. Danke 
dafür!

Es sieht so aus, dass ich um das Schwergewicht Apache nicht herumkomme. 
Habe gedacht, ein paar Zeilen bash-script würden reichen.

von M. V. (-_-)


Lesenswert?

Torsten S. schrieb:
> Es sieht so aus, dass ich um das Schwergewicht Apache nicht herumkomme.

Quatsch. Andere Webserver können das auch.

von morob65 (Gast)


Lesenswert?

ngnix

von imonbln (Gast)


Lesenswert?

Wenn die Webcam mit basic authorization läuft, geht da vielleicht was 
mit dem Perl HTTP::Proxy Module. den Bananpi beim  Fernseher als Proxy 
eintragen. Wenn dann die Webcam angesurft wird greift der Match und der 
username+passwort wird injected.

[code]
#!/usr/bin/perl

use strict;
use warnings;

use HTTP::Proxy;
use HTTP::Proxy::HeaderFilter::simple;
use Term::ReadPassword;

my $port   = 8888;
my $user;
my $passwd;

print "Please Enter username: ";
chomp ($user = <>);
$passwd = read_password("password: ");

my $filter = HTTP::Proxy::HeaderFilter::simple->new(
        sub {
                my ( $self, $headers, $message ) = @_;
                my $get_uri = $message->uri() or die;

                if ($get_uri =~ m{webcamIP}) {
                        $message->authorization_basic($user,$passwd);
                };
        }
);

print "Start Proxy on Port $port and inject authorization for $user\n";
my $proxy = HTTP::Proxy->new( port => $port );

$proxy->push_filter(request => $filter);
$proxy->start;
[code]

von Torsten S. (tse)


Lesenswert?

Auf die Idee, den BPi als Proxy zu verwenden, wäre ich nie gekommen. Am 
obigen Code sieht man auch, dass Du das nicht zum ersten mal machst. 
Respekt!

Hiermit muss ich bekennen, das ich von Perl nur soviel weiss als dass es 
diese Programmiersprache gibt. Ich bitte um Nachsicht.

Die obigen Zeilen zwischen "code" habe ich in eine Datei "myproxy.pl" 
kopiert, ins /root Verzeichnis befördert und ausführbar gemacht. Das kam 
dann raus:
1
root@bpi:~# /root/myproxy.pl
2
Can't locate HTTP/Proxy.pm in @INC (@INC contains: /etc/perl /usr/local/lib/perl/5.14.2 /usr/local/share/perl/5.14.2 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.14 /usr/share/perl/5.14 /usr/local/lib/site_perl .) at /root/myproxy.pl line 6.
3
BEGIN failed--compilation aborted at /root/myproxy.pl line 6.

Vielleicht is mein OS etwas zu alt:
1
root@bpi:~# uname -a
2
Linux bpi 3.4.103-sunxi #6 SMP PREEMPT Wed Sep 24 21:11:21 CEST 2014 armv7l GNU/Linux

Bin ratlos.

von Imonbln (Gast)


Lesenswert?

> root@bpi:~# /root/myproxy.pl
> Can't locate HTTP/Proxy.pm in @INC (@INC contains: /etc/perl
> /usr/local/lib/perl/5.14.2 /usr/local/share/perl/5.14.2 /usr/lib/perl5
> /usr/share/perl5 /usr/lib/perl/5.14 /usr/share/perl/5.14
> /usr/local/lib/site_perl .) at /root/myproxy.pl line 6.
> BEGIN failed--compilation aborted at /root/myproxy.pl line 6.

Eigentlich sagt hier Perl nur das es das CPAN Module HTTP/Proxy.pm nicht 
kennt. Unter debian/ubuntu müsste das, dass Paket libhttp-proxy-perl 
sein das fehlt. Wenn du was anderes als Debian nutzt musst du da mal 
gucken ob es von denn als Paket verteilt wird.

Alternativ kannst du dich auch belesen wie man perl Pakete direkt aus 
CPAN installiert. Aber da hört meine Kenntnis von Perl auch auf.

von Andy P. (Gast)


Lesenswert?

Imonbln schrieb:
> Can't locate HTTP/Proxy.pm in @INC

heißt übersetzt: "gib folgendes Befehl als root ein:"

(sudo) cpan install HTTP::Proxy

(auf Groß/Kleinschreibung achten!)

Was die debilans bei ihrer Paketbenennung geraucht haben, möcht ich aber 
zu gern mal wissen. Die Namesverrenkungen sind ja nicht mehr feierlich.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.