[PHP] FTP welcome message uitlezen met fgets

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik probeer de welcome message van ftp.thrijswijk.nl uit te lezen met de volgende code:
PHP:
1
2
3
4
5
6
7
8
<?
$ftpconnection = fsockopen("ftp.thrijswijk.nl", 21, $errno, $errstr, 10); 
while (!feof($ftpconnection)) {
    $buffer = fgets($ftpconnection, 4096);
    echo $buffer;
}
fclose($ftpconnection);
?>


Dit resulteert in de volgende error:
code:
1
2
220 (vsFTPd 1.2.1) 
Fatal error: Maximum execution time of 30 seconds exceeded in c:\www\webroot\test.php on line 5


Hij laat dus wel de eerste regel van de welcome message zien maar niet de rest. Kom dit nu omdat er geen 'eind' wordt gegeven zodat ie maar eindeloos door blijft gaan? Ik heb al lopen zoeken maar kom er niet uit.

Acties:
  • 0 Henk 'm!

Verwijderd

Waar het precies aan ligt IN jouw code ben ik niet zeker van.. denk dat je té simpel denkt. Hij maakt nu gewoon een connectie(fsockopen) met de ftpserver van thrijswijk.nl en dan krijg je de BANNER te zien, zeg maar de versie van de ftpd.

In jouw geval is dit vsFTPd 1.2.1.

Dit is dus niet het loginbericht.. om te snappen wat ik bedoel doe je voor het gemak in dos 'telnet ftp.thrijswijk.nl 21' , en tada, daar is de banner die jij ziet.. ik denk dat je het met een soort ftp script zult moeten proberen.. zoek eens op PHPFreakz.nl, die hebben wellicht iets voor je!

Zalio

Acties:
  • 0 Henk 'm!

  • zeroxcool
  • Registratie: Januari 2001
  • Laatst online: 19-09 09:59
Meestal wordt de welcome pas gedisplayed als je bent ingelogd...

zeroxcool.net - curity.eu


Acties:
  • 0 Henk 'm!

Verwijderd

Daarom hier een stukje hulp voor je!

code:
1
2
3
4
5
6
7
8
9
10
220 (vsFTPd 1.2.1)
user anonymous
331 Please specify the password.
pass anonymous
230 Login successful.
syst
215 UNIX Type: L8
pasv
227 Entering Passive Mode (194,171,240,20,160,136)
list -al



<?
$ftpconnection = fsockopen("ftp.thrijswijk.nl", 21, $errno, $errstr, 10);
fputs($ftpconnection, 'user anonymous');
fputs($ftpconnection, 'pass anonymous');
fputs($ftpconnection, 'syst');
fputs($ftpconnection, 'pasv');
fputs($ftpconnection, 'list -al');
while (!feof($ftpconnection)) {
$buffer = fgets($ftpconnection, 4096);
echo $buffer;
}
fclose($ftpconnection);
?>

Zoiets moet je code uit gaan zien dan.. en dan natuurlijk dan nog de loginmsg opvangen, ik hoop dat ie dit nu al automatisch doet met jouw fgets..

Succes ermee!

//edit: Ik zie dat bij bijvoorbeeld een Serv-U ftp server de loginmsg al komt na de PASS .. wordt even stoeien dus met de verschillende ftpds :p

[ Voor 64% gewijzigd door Verwijderd op 19-10-2004 22:33 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Deze werkt, zelf uitgetest(bij een serv-u FTP Server):

<?php
$fp = fsockopen("IP", POORT, $errno, $errstr, 30);
if (!$fp) {
echo "$errstr ($errno)<br />\n";
} else {
// $out = "user anonymous";
// $out .= "pass anonymous";

// fwrite($fp, $out);

while (!feof($fp)) {
echo nl2br(fgets($fp, 128));
}
fclose($fp);
}
?>

Acties:
  • 0 Henk 'm!

  • Kuhlie
  • Registratie: December 2002
  • Niet online
Waarom je (eerste) code niet werkt weet ik niet, maar wat belangrijk is is dat je die check van zalio:

PHP:
1
if (!$ftpconnection) die("hoje!");


uitvoert, omdat feof(0) altijd false (en een warning?) oplevert en je daarom in je while-loop blijft huppelen.

Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op 19 oktober 2004 @ 21:55:
Ik probeer de welcome message van ftp.thrijswijk.nl uit te lezen met de volgende code:
PHP:
1
2
3
4
5
6
7
8
<?
$ftpconnection = fsockopen("ftp.thrijswijk.nl", 21, $errno, $errstr, 10); 
while (!feof($ftpconnection)) {
    $buffer = fgets($ftpconnection, 4096);
    echo $buffer;
}
fclose($ftpconnection);
?>


Dit resulteert in de volgende error:
code:
1
2
220 (vsFTPd 1.2.1) 
Fatal error: Maximum execution time of 30 seconds exceeded in c:\www\webroot\test.php on line 5


Hij laat dus wel de eerste regel van de welcome message zien maar niet de rest. Kom dit nu omdat er geen 'eind' wordt gegeven zodat ie maar eindeloos door blijft gaan? Ik heb al lopen zoeken maar kom er niet uit.
Tamelijk logisch. De server stuurt je namelijk een welcome message en wacht daarna op een reactie van jou (i.e., inloggen met een USER/PASS combo).

Aangezien jij nooit een reactie stuurt, blijft de server gewoon wachten. De verbinding blijft ondertussen gewoon open (dus feof() is blij), maar na 30 seconden vindt PHP het welletjes en kapt je script af.

Dus òf je moet iets nuttigs gaan doen op de FTP server, of de verbinding sluiten nadat je de welcome string binnen hebt.
Pagina: 1