batimbus
Goto Top

Dateien auf dem FTP Server prüfen

Hallo,

ich bin neu hier, habe aber dennoch keine Lösung für mein Problem im Forum oder im Internet gefunden, weiß gar nicht ob es möglich ist.

Ich suche nach einer Möglichkeit, Dateien automatisch direkt auf einem FTP-Server zu überprüfen ohne diese erst runterladen zu müssen.
Geprüft werden soll ob z.B. eine bestimmte Datei zu einen bestimmten Zeitpunkt vorhanden ist und welche Dateigröße diese hat.
Wenn die Datei nicht vorhanden ist, soll z.B. eine email an mich verschickt werden.

Bisher habe ich nur Programme gefunden, die entweder die Dateien downloaden und diese dann prüfen können oder aber nur Dateien synchronisieren.
Ich habe auch nicht dagegen dies über eine Batchdatei zu lösen, nur leider bin ich da nicht so erfahren.

Vielleicht weiß ja jemand so ein Programm oder kann mir Tipps geben, wie ich so etwas machen kann.
Anbei ein paar Daten:


System auf dem das Programm laufen soll: Windows Server 2008.
FTP-Server auf dem die Daten zu prüfen sind ist: Xlight FTP oder Microsoft IIS Server.
Zugriff auf den FTP nur via IP möglich (steht nicht im gleichen Netzwerk).

Software soll als permanenter Task laufen und Daten prüfen
geprüft werden soll z.B.:

Datei auf vorhanden sein --> wenn nein Email senden
Dateigröße --> wenn zu klein, Email senden


Wäre super, wenn jemand eine Lösung kennt.
Wenn ihr noch Infos von mir benötigt, sagt es einfach.

gruss

Batimbus

Content-ID: 174491

Url: https://administrator.de/contentid/174491

Ausgedruckt am: 22.11.2024 um 07:11 Uhr

TheDarkLord
TheDarkLord 11.10.2011 um 18:25:56 Uhr
Goto Top
Gude,

ganz kurz nur zum Dateien überprüfen:
Versuch es doch mal mit NetDrive, ein Programm, welches einen FTP Server direkt als Netzlaufwerk im System einbindet, wo man also auch ganz normal mit den Dateien arbeiten kann, als wäre es ein lokaler Ordner. Das Programm kann man so einrichten, dass es bei Windowsstart mit gestartet wird und man kann auch eine FTP Verbindung beim Programmstart automatisch gleich einbinden lassen.
Ich benutze NetDrive immer, wenn ich auf nem FTP Server arbeiten muss, da ich dort wie schon erwähnt ganz normal sämtliche Dateioperationen ausführen kann wie Rechtsklick -> Neu oder kopieren, verschieben, umbenennen, editieren etc pp.

Ist das realisiert, kannst Du z.B. per Batch nach dem Motto "if exist X:\Datei.xxx do ..." Deine Prüfroutinen ausführen lassen.
Falls Du mit der Batch noch Schwierigkeiten haben solltest, meld Dich einfach mal. Ich kann Dir da bestimmt weiter helfen bzw. bastla, der Batch Guru schlechthin springt ja auch hier irgendwo herum face-smile

Gruß
Dark
TheDarkLord
TheDarkLord 11.10.2011 um 18:27:13 Uhr
Goto Top
Nachtrag:

Die Batch kannst Du dann natürlich per Task in einem bestimmten Rythmus ausführen lassen. Rythmus, Rhytmus, Rhythmus? Ich hasse dieses Wort xD
Arano
Arano 11.10.2011 um 20:38:06 Uhr
Goto Top
Hallo

ich MUSS jetzt auch noch meinen Beitrag dazu los werden...

Mein Plan war es, __ganz einfach__ mit der Batchdatei und der ftp.exe die Verzeichnisliste vom FTP-Server zu holen und in dieser dann die zu "Überwachende" Datei und die Größenangabe heraus zu filtern.
Jaja... "gaaanz einfach" : die ftp.exe hat da so ein paar "Einschränkungen".

Dummerweise konnte ich nicht davon ablassen selber tätig zu werden,
darum habe ich mich der psftp.exe (Putty-FTP-Client) bedient: Putty Download Page (und psftp) - denn irgendwie muss das doch gehen face-smile

@echo off

REM Infos zur überwachten Datei
set "FILE=readme.txt"  
set "SIZE=626"  
REM Benutzerdaten zum FTP-Server
set "FTP_SERVER=192.0.0.180"  
set "FTP_USER=benutzername"  
set "FTP_PASS=******"  

REM Logdatei zum speichern der "FTP-Verzeichnisliste"  
REM Mein FTP-Server listet so auf:
REM -rw-r--r--    1 arano    arano         626 Mar 12  2006 readme.txt
REM Token-5 = Bytes
REM Token-9 = Dateiname
set "LOG=batch-ftp.log"  
REM Datei in die die FTP-Komandos "zwischengespeichert" werden  
set "CMDS=ftp-commands.cmd"  
REM Lösche eventuelle "überbleibsel"  
if exist %LOG% del %LOG%
if exist %CMDS% del %CMDS%

REM Erstelle Temporäre FTP-Kommando-Datei
>>%CMDS% echo ls
REM FTP-Aktionen in Logdatei umleiten
>>%LOG% psftp.exe -b %CMDS% -l %FTP_USER% -pw %FTP_PASS% %FTP_SERVER%
REM Lösche FTP-Kommando-Datei
del %CMDS%

REM Suche in der Logdatei nach der Datei und überprüfe sie
for /F "tokens=5,9" %%i IN ('findstr "%FILE%" %LOG%') DO (  
  echo Datei %%j gefunden, teste Groesse %%i ^>= %SIZE%
  if %%i GEQ %SIZE% (
    echo Groesse OK
  ) else (
    echo zu klein !!
    goto send_mail
  )
  set "found=true"  
)

REM wenn %found% nicht "true" ist, wurde Datei nicht gefunden  
if not "%found%"=="true" (  
  echo Datei %FILE% existiert nicht
  goto send_mail
)


REM wenn das Programm bi hier her durch läuft,
REM war wohl alles in Ordnung.
REM "überspringe" E-Mail versand !  
goto ende


REM wird hierher gesprungen, gab es eine Differenz,
REM benachrichtige den Admin
:send_mail
echo Sende E-Mails an Admin (verwende blat.exe)


:ende
REM Programmende, lösche Verzeichnisliste
del %LOG%


pause

Tja, das müsstest du dann noch etwas an die Ausgabe des FTP-Servers (Verzeichnisliste) anpassen.
ACHTUNG: Das Passwort und der Benutzername zum FTP-Account stehen in der Datei (Leserechte nur für Admins einstellen) !
Auch dieses, wie TheDarkLord schon vorschlug, mit den Tasks im gewünschtem Rhythmus ausführen lassen.


~Arano

...und dabei wollte ich eigentlich etwas anders machen...
TheDarkLord
TheDarkLord 11.10.2011 um 20:46:22 Uhr
Goto Top
Zitat von @Arano:

Auch dieses, wie TheDarkLord schon vorschlug, mit den Tasks im gewünschtem Rhythmus ausführen lassen.


Danke für die Richtigstellung face-smile

PS: Dein letzter Satz "Dabei wollte ich eigentlich etwas anderes machen" wird übrigens in Deinem Beitrag nicht angezeigt...
Arano
Arano 11.10.2011 um 21:04:04 Uhr
Goto Top
Hey,

Danke für die Richtigstellung face-smile
Naja, also... ich war mir wegen der Rechtschreibung ziemlich sicher, hab es dann aber doch nachgeschlagen face-smile

PS: Dein letzter Satz "Dabei wol... ... hen" wird übrigens in Deinem Beitrag nicht angezeigt...
Öhm... und warum kann ich den Lesen (sowohl ein-, als auch ausgeloggt) und du ebenfalls ?


~Arano
Friemler
Friemler 11.10.2011 um 21:04:43 Uhr
Goto Top
Hallo batimbus,

hier gibt's dann noch meinen Senf dazu:
@echo off & setlocal


set "FileList="test1.txt" "test2.txt" "test3.txt""  
set "FileSizes=28537 1459 3469"  

set "FTPServer=DerFTPServer"  
set "FTPUser=FTPUsername"  
set "FTPPass=FTPPasswort"  


set "FTPScript=%Temp%\FTPScript.txt"  

> "%FTPScript%" echo open %FTPServer%  
>>"%FTPScript%" echo user %FTPUser% %FTPPass%  
>>"%FTPScript%" echo ascii  
>>"%FTPScript%" echo ls -l  
>>"%FTPScript%" echo bye  

for /f "tokens=5,8*" %%a in ('ftp -n -v -s:"%FTPScript%" ^| findstr /v "^ftp> ^bye ^d"') do (  
  call :ProcessFileName "%%c" %%a  
)

for %%f in (%FileList%) do (
  if %%f neq "" call :FileNotFound %%f  
)

del "%FTPScript%"  
exit /b



:ProcessFileName
  set "FileName=%1"  
  set /a Idx=1

  for %%f in (%FileList%) do (
    if %%f equ %FileName% (
      call :CheckFileSize %FileName% %2
      call set "FileList=%%FileList:%%~f=%%"  
    )
    set /a Idx+=1
  )
exit /b


:CheckFileSize
  for /f "tokens=%Idx%" %%s in ("%FileSizes%") do (  
    if %%s neq %2 call :FileSizeWrong %1 %2
  )
exit /b


:FileSizeWrong
  echo Dateigröße falsch: %1 %2 Bytes
  rem Hier ein BLAT-Aufruf
exit /b


:FileNotFound
  echo Datei nicht gefunden: %1
  rem Hier ein BLAT-Aufruf
exit /b

Das Script verwendet den FTP-Befehl von Windows. Verzeichnisnamen im Listing des FTP-Servers werden nicht berücksichtigt und man kann nicht nur eine Datei und ihre Größe angeben sondern mehrere (die auch Leerzeichen im Namen enthalten können). In den Zeilen 4 und 5 werden diese Listen zusammengebaut. Die Reihenfolge von Namen und Dateigrößen in den beiden Listen muss miteinander korrespondieren. Die Dateinamen MÜSSEN AUCH WENN SIE KEINE LEERZEICHEN ENTHALTEN jeder für sich in Anführungszeichen eingeschlossen werden.

Wie TheDarkLord schon schrieb, lässt man das Script am besten als geplanten Task ausführen. Batchscripte, die die ganze Zeit im Hintergrund laufen, verursachen eine zu hohe Prozessorlast

Gruß
Friemler
TheDarkLord
TheDarkLord 11.10.2011 um 21:07:33 Uhr
Goto Top
Zitat von @Arano:
Hey,

> Danke für die Richtigstellung face-smile
Naja, also... ich war mir wegen der Rechtschreibung ziemlich sicher, hab es dann aber doch nachgeschlagen face-smile

> PS: Dein letzter Satz "Dabei wol... ... hen" wird übrigens in Deinem Beitrag nicht angezeigt...
Öhm... und warum kann ich den Lesen (sowohl ein-, als auch ausgeloggt) und du ebenfalls ?


~Arano

Hmm das frage ich mich gerade auch, eben war das nicht da... kurios face-smile
Arano
Arano 11.10.2011 um 21:38:45 Uhr
Goto Top
Huhu,

Friemlers Senf schmeckt besser und sauberer ist er auch !

Bei mir funktioniert es / was nicht... könnte an der VM liegen... jedenfalls ist das der Grund warum ich dann psftp.exe verwendet habe.
C:\DuE\Arano>ftp -n -v
ftp> open 192.168.178.180
ftp> user arano
Kennwort: ******
ftp> pwd
257 "/home/arano" is the current directory  
ftp> ls -l
Illegal PORT command
ftp> pwd
257 "/home/arano" is the current directory  
ftp>
Nach der Ausgabe von "Illegal PORT command" dauert es eine Weile und erst dann springt er einen weiter und lässt sich weiter befehlen.
FTP-Server Log dazu:
Okt 11 21:28:30 proftpd[4625] : FTP session opened.
Okt 11 21:28:37 proftpd[4625] : USER arano: Login successful.
Okt 11 21:28:45 proftpd[4625] : Refused PORT 10,0,2,15,19,140 (address mismatch)

Meinte das läge an einer fehlenden PASV-Mode unterstützung.
Wobei... wenn es mit psftp funktioniert, dann kann es wiederum ja nicht an der VM gelegen haben...


~Arano

Edit:
Falls jemand wegen den IP unterschieden fragen möchte: 10.0.2.15 ist das WinXP in der virtuellen Maschine (VirtualBox)
Probiere ich das gleich mit 10.0.2.2 als FTP-Server, geschieht leider das gleiche, daran liegt es also auch nicht.
batimbus
batimbus 12.10.2011 um 09:25:33 Uhr
Goto Top
Hey Leute,

danke erst einmal für die schnellen Antworten. Hätte ja nicht gedacht, das es gleich so viele sind.
Ich werde das jetzt mal ausprobieren und euch berichten.

~ batimbus
batimbus
batimbus 19.10.2011 um 14:11:13 Uhr
Goto Top
Habe jetzt mal Net Drive und Visual Cron installiert. Der Zugriff auf den FTP klappt perfekt.
Jetzt habe ich nur noch das Problem, das Visual Crown eine Email bei Fehler sendet. Im Moment sendet er entweder immer eine Email oder gar nicht.

Kennt sich vielleicht jemand mit Visual Cron aus?

~ batimbus