Schrift
[thread]12001[/thread]

DBI/FTP Anfragen über Proxy leiten

Leser: 1


<< |< 1 2 >| >> 13 Einträge, 2 Seiten
justme69
 2008-06-11 17:27
#110973 #110973
User since
2004-07-19
31 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hallo zusammen,

ich habe 2 Skripte die ohne Proxy funktionieren. Die Netzzugriffe gehen auf einen entfernten Rechner, also nicht auf localhost.

1) Per DBI::mysql Daten in eine mysql-DB schreiben/lesen etc.
2) Per FTP Daten übertragen und FTP-Aktionen ausführen (put / get) etc.

ich würde diese beiden Skripte gerne um einen Proxy-Zugriff erweitern, d.h. das die jeweiligen Anfragen übers Netz dann über den Proxyzugriff laufen.
Sollte nach Möglichkeit optional auch mit Proxy-Authentifikation laufen (Username/Pwd) können.

Welche(s) Modul(e) eigenen sich am ehesten dafür und wie kompliziert gestaltet sich dann der DBI/FTP-Aufruf ?

Danke für Infos/Anregungen/Fragen :-;
MfG
Stefan
murphy
 2008-06-11 17:53
#110974 #110974
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
Dafür muss man doch eigentlich nichts selbst schreiben. Es gibt jede Menge fertiger Proxies, die man benutzen könnte – zum Beispiel Squid für HTTP und FTP oder etwas generisches wie STunnel, wenn es nur um Authentifizierung und Absicherung der Verbindung geht.
When C++ is your hammer, every problem looks like your thumb.
justme69
 2008-06-12 10:08
#110983 #110983
User since
2004-07-19
31 Artikel
BenutzerIn
[Homepage] [default_avatar]
Da ich die Skripte aber von einer anderen Anwendung aus bereits anstosse und diese im Prinzip von der CMD aus laufen (Windoof) und sobald Proxy konfiguriert ist die Teile nicht mehr laufen - werd ich wohl was programmieren müssen.
Eine andere Anwendung dazu noch zu konfigurieren oder zu verwenden halte ich für nicht praktikabel.

DAher meine Frage - welche Module eignen sich dazu und wie müssen dann die Anfragen DBI/FTP umgebastelt werden ?
;-)
MfG
Stefan
murphy
 2008-06-12 15:16
#110988 #110988
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
Ich denke, ich verstehe Deine Problemstellung nicht:

- Läuft bereits irgendeine Art von Proxy, oder willst Du einen neu einrichten?
- Falls bereits ein Proxy läuft, was für einer ist das?
- Wie sieht die Netzwerktopologie aus?
- [s]Welches Protokoll benutzt Du um auf die Datenbank zuzugreifen, bzw. welches DBMS verwendest Du?[/s] edit: Sehe gerade, dass es MySQL ist.
When C++ is your hammer, every problem looks like your thumb.
justme69
 2008-06-12 15:35
#110991 #110991
User since
2004-07-19
31 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hallo Murphy,

im Moment läuft kein Proxy, die Skripte laufen.
Bei einem Freund der wahlweise (DSL-Sattelit) über Proxy-Server online geht läuft es nicht, geht er über ISDN (Ohne Proxy) online laufen die Skripte.
Da er aber keine ISDN-Flatrate hat möchte er gerne DSL nutzen.

Den genauen Proxy kenne ich nicht - ist aber einer vom DSL-Provider, also kein Free-Proxy oä.

PC mit Netzwerkkarte geht über DSL oder ISDN online. DSL mit Proxy (Providervorgabe) , ISDN ohne Proxy-Server Einstellungen.

Verwendet wird, wie du bereits gesehen hast DBD::MySql und/oder Net::FTP um die jeweiligen Daten zu übertragen.

Es handelt sich um eine FileMaker Pro Datenbank, die per Skript das jeweilige Perl-Skript aufruft um die Daten auf den Webserver zu übertragen. Filemaker hat keine Einstellmöglichkeiten für eine Proxy-Konfiguration.

Daher geht mein Ansatz in die Richtung die Perl-Skripte direkt via Proxy-Konfiguration zu steuern und bei Bedarf übder den Proxy-Server zu routen.

Hoffe, es ist ein wenig verständlicher geworden ;-)
MfG
Stefan
murphy
 2008-06-12 17:49
#110995 #110995
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
Bei einer Satellitenverbindung gehe ich mal davon aus, dass der Proxyserver des ISPs ein reiner HTTP-Proxy ist. Darüber kann man zwar ohne weiteres Webseiten abrufen und auch FTP-Resourcen herunterladen (zumindest mit CPAN:LWP statt CPAN:Net::FTP), das Hochladen von Dateien und die Datenbankverbindung werden jedoch je nach Konfiguration dieses Proxys kompliziert bis unmöglich.

Es stellen sich jetzt nochmal einige Fragen: Zum einen, was weisst Du über die Proxykonfiguration beim ISP?
- Funktionieren HTTP und FTP darüber mit einem normalen Browser fehlerfrei?
- Funktioniert auch ein FTP-Upload?
- Funktioniert auch HTTPS und wenn ja, funktioniert es auch auf Nichtstandardports – anders gesagt, erlaubt der Proxy CONNECT-Befehle und wenn ja zu welchen Ports?

Und zum anderen, kannst und willst Du an den Skripten auf der Client- und Serverseite gegebenenfalls etwas verändern, um den Zugriff auf den Server via Proxy zu ermöglichen, oder suchst Du eine Lösung, bei der Client und Server vorgespielt wird, es gäbe gar keinen Proxy?

Je mehr der Proxy des ISPs kann, desto einfacher wird es, und je weniger Du bereit bist an Deinen existierenden Programmen zu ändern, desto komplizierter wird es ;-) Die Umleitung der MySQL-Verbindung über einen HTTP-Proxy wird aber in jedem Falle problematisch.
When C++ is your hammer, every problem looks like your thumb.
justme69
 2008-06-12 18:04
#110996 #110996
User since
2004-07-19
31 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hallo murphy,

Zu deinen Fragen, HTTP und FTP laufen mit Browser FTP-Programm einewandfrei über den Proxy. FTP-Upload ebenfalls.
HTTPS funktioniert mW auch, ob auf Nicht-Standard-Ports muss ich erst in Erfahrung bringen.

Ich bin durchaus bereit an meinen Skripten was zu verändern - zB eine Skriptvariante für verbindungen ohne Proxy (jetzige Version)
und eine Version über Proxy-Server.

Soweit ich weiß wird einfach in der Internet-Konfig die Proxy-Daten des ISP eingetragen und es läuft. Dh Serveradresse und Port. Ich glaub Username und Pwd ist nicht erforderlich - bin mir aber nicht 100% sicher dabei.
Ich hab auf den Rechner mit Proxy leider keinen direkten Zugriff und Infos dazu sind entweder über email oder teilw Telefon möglich, je nach Erreichbarkeit ;-)

Gerade die MySql-Daten über Proxy wären wichtig. Das FTP-Gehampel ginge zur Not auch manuell über ein FTP-Programm...
MfG
Stefan
murphy
 2008-06-12 18:45
#110997 #110997
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
In dieser Situation würde ich Dir erstmal empfehlen, Deinen Client von CPAN:Net::FTP auf CPAN:LWP umzustellen. Damit sollten die FTP-Zugriffe auch über den Proxy funktionieren – mit der env_proxy-Option für LWP::UserAgent und korrekt eingestellten Umgebungsvariablen sogar automatisch.

Für den MySQL-Zugriff sehe ich zwei Möglichkeiten:
(1) Bevor man im Client eine Datenbankverbindung aufbaut, schaut man nach, ob ein Proxyzugriff nötig ist. Falls ja, forkt man sich.

Im neuen Prozess erstellt man einen lokalen lauschenden Socket und wartet auf eine Verbindung. Sobald eine lokale Verbindung kommt, verbindet man sich mit dem HTTP-Proxy, authentifiziert sich, weist ihn per CONNECT an, eine Verbindung zum eigentlichen Datenbankserver zu vermitteln, und beginnt dann zwischen der lokalen Verbindung und der Proxyverbindung zum Datenbankserver einfach Daten hin- und herzukopieren. Das Herstellen der Verbindung über den Proxy kann man eventuell mit CPAN:LWP::UserAgent erledigen, aber vielleicht nicht alleine mit der dokumentierten API :-(

Im ursprünglichen Prozess weist man dann CPAN:DBD::mysql an, sich mit dem lokalen Socket zu verbinden, den man für die Proxyverbindung erstellt hat.

(2) Man lässt auf der Serverseite neben dem MySQL-Server noch einen HTTP-Server laufen, der Datenbankabfragen entgegen nimmt und die Resultate zurückschickt. Der Client baut dann keine direkte Verbindung mehr mit der Datenbank auf, sondern verwendet stattdessen die HTTP-Schnittstelle, die sich leichter durch Proxies leiten lässt. Für diesen Zweck würde sich ein Protokoll wie CPAN:XML::RPC eignen.

Sauberer ist wahrscheinlich Lösung (2), insbesondere, da man durch diese Architektur die Datenbankabfragen einschränken kann, die dem Client erlaubt sind. Bei einem Client der sonstwo im Netz sitzen kann und folglich nicht völlig vertrauenswürdig sein kann, ist das im allgemeinen eine gute Idee.
When C++ is your hammer, every problem looks like your thumb.
justme69
 2008-06-12 20:44
#110998 #110998
User since
2004-07-19
31 Artikel
BenutzerIn
[Homepage] [default_avatar]
murphy+2008-06-12 16:45:34--
Für den MySQL-Zugriff sehe ich zwei Möglichkeiten:
(1) Bevor man im Client eine Datenbankverbindung aufbaut, schaut man nach, ob ein Proxyzugriff nötig ist. Falls ja, forkt man sich.

Ähm... forken ? Ist das essbar ? ;-) Mit Prozessen etc hatte ich noch nix zu tun, bin schon happy wenn die SQL-Abfragen funktionieren ;-)

murphy+2008-06-12 16:45:34--
(2) Man lässt auf der Serverseite neben dem MySQL-Server noch einen HTTP-Server laufen, der Datenbankabfragen entgegen nimmt und die Resultate zurückschickt. Der Client baut dann keine direkte Verbindung mehr mit der Datenbank auf, sondern verwendet stattdessen die HTTP-Schnittstelle, die sich leichter durch Proxies leiten lässt. Für diesen Zweck würde sich ein Protokoll wie CPAN:XML::RPC eignen.

Nun, der Server, auf dem die MySql-DB läuft ist eine Homepage-Server, ein gehosteter Server, der eben Zugriffe via FTP HTTP und mysql gestattet.
Ich glaube nicht, das ich da einen separaten Server installieren/verwenden kann... Wenn sich die bisherige Variante über HTTP/Proxy so schon umleiten lässt - wunderbar...

Finde ich lobenswert, das du dir mit mir solche Mühe machst ;-) Danke.

Das mit FTP und LWP und Proxy lassen wir mal aussen vor, die mysql-Zugriffe mit Proxy sind mir erstmal wichtiger, da sie auch öfter vorkommen.
MfG
Stefan
murphy
 2008-06-13 02:59
#111008 #111008
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
justme69+2008-06-12 18:44:52--
[...] Nun, der Server, auf dem die MySql-DB läuft ist eine Homepage-Server, ein gehosteter Server, der eben Zugriffe via FTP HTTP und mysql gestattet.


Wenn man dort auch Perl CGIs installieren kann, kann man vermutlich trotzdem einen RPC-Proxy basteln.

Quote
[...] Wenn sich die bisherige Variante über HTTP/Proxy so schon umleiten lässt - wunderbar...


Möglich ist das schon, aber es ist eben davon abhängig, dass der Proxy CONNECT unterstützt, und zwar auch zu dem Port, auf dem MySQL lauscht und auch, wenn das, was dann über die Leitung läuft kein SSL-Protokoll ist. Erfahrungsgemäß ist das leider bei vielen Proxys nicht der Fall. Ich würde es auf jeden Fall erstmal testen, bevor ich in diese Richtung mehr Arbeit investiere…

Das Forken ist bei der ganzen Geschichte übrigens die leichteste Übung:
Code (perl): (dl )
1
2
3
4
5
6
7
8
die "fork: $!" unless (defined(my $pid = fork));

if ($pid) {
  say 'Hello from parent process';
}
else {
  say 'Hello from child process';
}
When C++ is your hammer, every problem looks like your thumb.
<< |< 1 2 >| >> 13 Einträge, 2 Seiten



View all threads created 2008-06-11 17:27.