PERL und SSL-Ports
Michael H.
- perl
hallo Newsgroup,
ich habe eine absolute "Denkblockade" in Sachen Perl und Ports.
Wenn ich auf einem Rechner prüfen will, ob dort SSL enabled ist,
würde ich das vieleicht wie siehe unten machen.
das Problen ist, wenn das Script einen Rechner entdeckt, des SSL an
hat bleibt die ganze Geschichte in der while-Schleife stecken.
d.h. das Script läuft nicht weiter.
Wo ist der Fehler?? Kann mir irgendjemand helfen??
(Es soll einfach nur eine Abfrage werden ob auf Port 443 im MS-IIS
SSL enabled ist.)
##################################################################
use IO::Socket;
my $remote = IO::Socket::INET->new( Proto => "tcp",
PeerAddr => $host,
PeerPort => "443",
);
unless ($remote) { die "cannot connect to http daemon on $host" }
$remote->autoflush(1);
print $remote "GET $document HTTP/1.0\n\n" ;
while (defined ($ret = <$remote>)) {
$retu .= $ret;
}
close $remote;
#################################################################
DANKE Michael
Hi,
while (defined ($ret = <$remote>)) {
$retu .= $ret;
}
close $remote;
Wenn IO::Socket genau so funktioniert wie Socket, dann liefert es einen Filedescriptor zurück. Warum
dann nicht einfach so?
while(<$remote>)
{ print; }
mfg
CK1
<img src="http://wwwtech.de/images/banner.jpg" alt="">
http://wwwtech.de/moorhuhn/
Wenn IO::Socket genau so funktioniert wie Socket, dann liefert es einen Filedescriptor zurück. Warum
dann nicht einfach so?while(<$remote>)
»» { print; }
mfg
CK1<img src="http://wwwtech.de/images/banner.jpg" alt="">
http://wwwtech.de/moorhuhn/
Hallo Christian,
Danke für die Antwort...
Es wäre zu schön um wahr zu sein.
Wenn ich GET auf Port 80 mache funzt das alle ja auch.
Aber bei Port 443 bekomme ich NICHTS zurück und der ganze
Kram hängt sich in der while-Schleife auf.
Bei Linux erkennt das Script sofort, wenn der Port nicht da ist,
aber IIS nimmt seltsamerweise eine Anforderung an den Port an,
auch wenn dieser nicht mit SSL belegt ist.
Irgeneine Bedingung für den Handler zu formulieren funzt
seltsamerweise nicht.
Michael
Hallo,
Soweit ich SSL kenne, ist der Verbindungsvorgang wesentlich komplizierter als bei 'normalem' HTTP. Es muß ja vorher noch ein Schlüssel vereinbart werden, was ein hin und her an Daten verursacht.
Kurzer Abriß aus 'Safer Net' über den Protokollablauf:
1.) der Client sendet 'Client-Hello' und Teilt dem Server mit, welche Kryptoverfahren er unterstützt.
2.) Der Server antwortet mit einem 'Server-Hello' und sagt dem Client, welches Verfahren er ausgesucht hat. Dazu schickt er sein Zertifikat.
3.) der Client schickt sein Zertifikat, und einen Sitzungsschlüssel, den er mit dem Schlüssel des Servers verschlüssselt.
Wenn alles gut gegangen ist, dann erfolgt der eignetliche Datenverkehr, so wie es unter HTTP üblich ist, allerdings werden die Daten halt verschlüssselt gesendet.
Ich will da jetzt gar nicht genauer eingehen, einiges ist unter <developer.netscape.com> zu finden.
Jedenfalls geht Dein Ansatz in die Hose, weil vor dem GET sicherlich ein Schlüssel für die Verbindung notwendig ist, sonst können ja die Daten nicht verschlüsselt werden.
Aber wenn Du nur wissen willst, ob der Port offen, also SSL enabled ist dann kannst Du ja nach erfolgreichem Connect gleich wieder abbrechen. Mehr ist mit einfachen Mitteln nicht drin :-(
Grüße
Klaus