Fallinger: Socketverbindung zu einem FTP Server?

Hi,

versuche gerade einen kleinen FTP Client zu basteln, der erstmal nur versuchen soll sich einzuloggen und zurückzugeben ob es geklappt hat. Also stelle ich eine Verbindung zu dem Server auf Port 21 her und sende user/pass. Allerdings mag das nicht so klappen, ich bekomme zwar schön die Version des Servers ausgegeben, aber das wars dann auch schon.

Jemand ein paar Anregungen was da falsch läuft?

mfg
Fallinger

#!/usr/bin/perl

use IO::Socket;
$remote_host = "196.27.211.145";
$remote_port = "21";

$socket = IO::Socket::INET->new
  (
   PeerAddr => $remote_host,
   PeerPort => $remote_port,
   Proto    => "tcp",
   Type   => SOCK_STREAM
  )
die "Socketverbindung fehlgeschlagen $remote_host:$remote_port $!\n";

print $socket "user test";

$antwort = <$socket>;
print $antwort;

print $socket "pass test";
$antwort = <$socket>;
print $antwort;

close($socket);

  1. Hallo!

    versuche gerade einen kleinen FTP Client zu basteln, der erstmal nur versuchen soll sich einzuloggen und zurückzugeben ob es geklappt hat.

    Eigentlich gibt es ja Net::FTP ... aber vielleicht ist es ja zum Uebungszweck?

    Allerdings mag das nicht so klappen, ich bekomme zwar schön die Version des Servers ausgegeben,

    An welcher Stelle genau im Programm? "user" sendet man doch erst nachdem man die Version ausgelesen hat, schon um evtl. Fehler festzustellen.

    print $socket "user test";

    Jede Zeile muss mit CRLF abgeschlossen werden. Also

    print $socket "user test\015\012";    oder auch   print $socket "user test\x0D\x0A";
    aber *nicht*:  print $socket "user test\r\n";

    $antwort = <$socket>;
    print $antwort;

    print $socket "pass test";

    print $socket "pass test\015\012";

    $antwort = <$socket>;
    print $antwort;

    print $socket "quit\015\012";

    close($socket);

    HTH, Calocybe

    1. Hi,

      Danke!!! Super das klappt jetzt! Da wär ich ja nie draufgekommen... Ja das ganze ist zu Übungszwecken (arbeite mich gerade in die schöne Welt der Sockets ein).

      Vielleicht kannst du mir auch folgende Frage beantworten:

      Wenn mich nun einlogge und es schlägt fehl, wie kann ich das dann ausgeben ohne den Text des FTP zu benutzen (den er wiedergibt?).

      Also irgendwie: gast Gasssst (also falsch), dann sagt das Script Fehler gast / Gasssst gibt es nicht. Ansonsten soll es einfach sagen: test/test logged in.

      So kann der User direkt sehen ob er sich korrekt eingeloggt hat oder ob er sich verschrieben hat.

      mfg und 1000THX
      Fallinger

      1. ReHi!

        Danke!!! Super das klappt jetzt! Da wär ich ja nie draufgekommen...

        Naja, das ist meines Wissens bei all diesen textbasierten Protokollen so (z.B. auch HTTP oder SMTP).

        Wenn mich nun einlogge und es schlägt fehl, wie kann ich das dann ausgeben ohne den Text des FTP zu benutzen (den er wiedergibt?).

        Am Anfang jeder Zeile steht ein Fehlercode. Bei falschem user/pass ist der 530 (hab ich gerade ausprobiert). Dieser Fehlercode ist es, den Dein Programm analysieren muss. Der Text dahinter ist fuer den User. Steht alls in RFC 959 Kapitel 4.2. (http://rfc.fh-koeln.de/rfc/html_gz/rfc0959.html.gz)

        Also irgendwie: gast Gasssst (also falsch), dann sagt das Script Fehler gast / Gasssst gibt es nicht. Ansonsten soll es einfach sagen: test/test logged in.

        Du kannst meines Wissens nicht feststellen, ob der Fehler nun im Username oder im Password liegt. Du sollst naemlich nicht austesten koennen, ob es einen bestimmtem Account auf einem System gibt (um danach auf diesen Account eine Brute Force Attack durchzufuehern, um das Passwort rauszufinden).

        So lange

        1. Hi,
          Danke, das mit dem Fehlercode funktioniert auch wunderbar :)

          Du kannst meines Wissens nicht feststellen, ob der Fehler nun im Username oder im Password liegt. Du sollst naemlich nicht austesten koennen, ob es einen bestimmtem Account auf einem System gibt (um danach auf diesen Account eine Brute Force Attack durchzufuehern, um das Passwort rauszufinden.)

          Schade... das ganze wird eh ein BF Programm daher ;)

          mfg
          Fallinger