[Code] Python - IP auf online-status prüfen

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von JudasIscariot, 6. November 2009 .

Schlagworte:
Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 6. November 2009
    Python - IP auf online-status prüfen

    Das Script holt sich aus ner Datei alle IP Adressen raus und schaut ob der Server noch online ist und ob man eine Datei übertragen kann.
    Leider sind alle Server die ich bisher probiert hab offline...
    Hab vllt was falsch gemacht also schaut mal pls drüber...

    Code:
    #!/usr/bin/python
    
    # Importieren
    import sys
    import re
    import ftplib
    import exceptions
    import os
    
    # Pfade setzen
    inpath = sys.argv[1]
    outpath = sys.argv[2]
    temppath = '/tmp/ipadressen'
    testpath = '/tmp/uploadtest'
    
    # Dateien oeffnen
    tempfile = open( temppath, 'w' )
    infile = open( inpath, 'r' )
    
    # Text einlesen
    text = infile.readlines()
    
    # IPv4 Adressen raussuchen und schreiben
    for line in text:
     if re.search( '^[0-9]', line ):
     tempfile.write( line )
    
    # Dateien schliessen
    tempfile.close()
    infile.close()
    
    # Dateien oeffnen
    tempfile = open( temppath, 'r' )
    outfile = open( outpath, 'a' )
    testfile = open( testpath, 'w' )
    
    # IPs einlesen
    IPs = tempfile.readlines()
    
    # Testfile
    i = 0
    while i != 23:
     i = i + 1
     testfile.write( "42 ")
    
    # Testfile schliessen
    testfile.close()
    
    i = 0
    
    # Pruefung
    for IP in IPs:
     try:
     ftpserver = ftplib.FTP( IP )
     if ftpserver.login(): 
     testfile = open( testpath, 'rb' )
     if ftpserver.storbinary( 'RETR ' + testpath, 'f' ):
     outfile.write( "+----Online-----+\n" + IP +"\n" )
     i = i + 1
     else:
     outfile.write( "+----Offline----+\n" + IP + "\n" )
    
     testfile.close()
     ftpserver.quit()
     except:
     outfile.write( "+----Offline----+\n" + IP + "\n" )
    
    # Dateien schliessen
    outfile.close()
    tempfile.close()
    
    # Daten loeschen
    os.remove( temppath )
    os.remove( testpath )
    
    # Ausgabe
    print( "\n %i Online Servers" % i )
    
    # Ende 
    
     
  2. 6. November 2009
    AW: Hilfe bei Python

    Hi,

    hab mich ausversehen bedankt, aber egal.
    Also das Problem ist, dass du bei ftpserver = ftplib.FTP( IP ) nicht einfach die IP übergeben kannst, du musst dem Objekt was erzeugt wird auch noch sagen welchen Parameter du überhaupt übergeben hast. Also muss es so heißen ftpserver = ftplib.FTP( host = IP ).
    Momentan bekommst du dauernd eine exception, weil du dich nicht richtig verbinden konntest. Du kannst dir ja mal immer wenn ein Fehler aufreten kann wie bei except: mit print "Fehler" zeigen lassen dass was schief gelaufen ist. Da siehst du dann schneller wo es hakt.

    hoffe dir geholfen zu haben
     
  3. 6. November 2009
    AW: Hilfe bei Python

    Ich hab jetzt in den Try Block mal nen print reingesetzt...
    Das funktioniert auch ohne host = IP
    Das einzige Problem was er meiner Meinung nah hat is das er keine daten übertragen kann... is da vllt nen fehler iwo in der Datenübertragung?
     
  4. 6. November 2009
    AW: Hilfe bei Python

    Das Problem liegt an mehreren stellen.
    1. bekommst du bei deinem regex z.T. leerzeilen
    2. Übergibts du beim Upload einen String. FTPLib verlangt aber ein file object.
    Da mir der Code zu unübersichtlich war, hab ich das Script mal ausgebessert und umgeschrieben:
    Spoiler
    Code:
    #!/usr/bin/python
    # -*- coding: cp1252 -*-
    
    # Importieren
    import sys
    import re
    import ftplib
    import exceptions
    import os
    
    #args prüfen
    if len(sys.argv) != 3:
     print 'Usage: ftptest.py ips.txt result.txt'
     exit()
    
    # input prüfen
    if not os.path.exists(sys.argv[1]):
     print '%s does not exist!' % (sys.argv[1])
     exit()
     
    # output prüfen
    if os.path.exists(sys.argv[2]):
     print '%s already exists!' % (sys.argv[2])
     exit()
     
    # IP Datei oeffnen
    ipfile = open( sys.argv[1], 'r' )
    
    # Text einlesen
    text = ipfile.readlines()
    
    # IPv4 Adressen raussuchen und in liste schreiben
    ips = []
    for line in text:
     if re.search( '^[0-9]', line ):
     ips.append(line.replace('\n',''))
    
    # IP Datei schliessen
    ipfile.close()
    
    # Testfile erzeugen
    if not os.path.exists('TEST'): 
     testfile = open('TEST','w')
     testfile.write('Just a test')
     testfile.close()
     
    # Listen erzeugen
    serverok = []
    servernowrite = []
    serveroff = []
    
    # Server prüfen
    for i in range(len(ips)):
     try:
     print 'Testing server: ' + ips[i]
     ftptest = ftplib.FTP(ips[i],'anonymous', 'test@test.test',timeout=10)
     ftptest.login()
     try:
     testfile = open('TEST','r')
     ftptest.storbinary('STOR TEST',testfile)
     ftptest.close()
     testfile.close()
     serverok.append(ips[i])
     except:
     ftptest.close()
     testfile.close()
     servernowrite.append(ips[i])
     except:
     serveroff.append(ips[i])
    
    # Output erzeugen:
    out = ''
    if not len(serverok) == 0:
     out += '-----Working-----\n'
     for i in range(len(serverok)):
     out += serverok[i] + '\n'
     
    if not len(servernowrite) == 0:
     out += '-----No rights-----\n'
     for i in range(len(servernowrite)):
     out += servernowrite[i] + '\n'
    
    if not len(serveroff) == 0:
     out += '-----Offline/Login failed-----\n'
     for i in range(len(serveroff)):
     out += serveroff[i] + '\n'
     
    # output schreiben
    outfile = open(sys.argv[2],'w')
    outfile.write(out)
    outfile.close()
    
    # Ende
    print 'Done!'
    exit()
    
    //edit: Man könnte noch das Testfile vom Server wieder löschen (und damit auf nondel prüfen)
     
  5. 6. November 2009
    Zuletzt von einem Moderator bearbeitet: 14. April 2017
    AW: Hilfe bei Python

    Hi,

    Ok hast recht das mit host ist nicht nötig.
    Ich hab jetzt mal in idle schnell was geschrieben. Das funktioniert so weit ohne Probleme.
    Bild
    Hast du mal einen eigenen Server erstellt mit dem du das getestet hast? Ich würde dir raten da stückweise vorzugehen und erstmal ohne die Datei nur versuchen auf einen Server zu connecten, bei dem es so funktionieren muss. Und dann wenn das geht kannst du anfangen mit dem Dateiupload. Du kannst auch einfach erstmal nur ein einfaches directory-listing machen, nur um zu sehen ob er überhaupt auf dem server drauf ist.

    bye
     
  6. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.