Python "Echo Off"

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
TheNew3000
User
Beiträge: 8
Registriert: Montag 3. März 2014, 15:35

Hallo,
Ich habe seit kurzem wieder mit Python angefangen und wollte mal etwas mit scapy machen,also dachte ich mir das ich einen IP-Scanner programmiere.So weit hat alles funktioniert,jedoch gibt der mir bei dem versenden der ICMP-Pakete zu viel aus(also für jede IP alle details) und das wollte ich halt unterbinden,indem ich dieses nicht im Terminal ausgeben lasse.Bei Google habe ich folgendes auf der Seite http://blog.hartwork.org/?p=1498 gefunden:

Code: Alles auswählen

import termios

def enable_echo(fd, enabled):
       (iflag, oflag, cflag, lflag, ispeed, ospeed, cc) \
                     = termios.tcgetattr(fd)
       if enabled:
               lflag |= termios.ECHO
       else:
               lflag &= ~termios.ECHO
       new_attr = [iflag, oflag, cflag, lflag, ispeed, ospeed, cc]
       termios.tcsetattr(fd, termios.TCSANOW, new_attr)
Jedoch verstehe ich den Aufbau des Codes nicht ganz...Also wo kann ich die Befehle,die nicht ausgegeben werden soll eingeben?Steht dafür die Variable fd oder enabled?Hier ist mein Code:

Code: Alles auswählen

            iprange = iprange.split("-")
            ip_list = IPGenerator(iprange[0],iprange[1])  #Eine Funktion zum erstellen einer IP-Range
            ip_online = []
            for i in range(0,len(ip_list)):
                ans,unans = sr(IP(dst = ip_list[i],ttl = ttl)/ICMP(),retry = retry,timeout = timeout)   #Das soll nicht ausgegeben werden
                if ans:
                    rein = ip_list[i],"is online"
                    ip_online.append(rein)
                if unans:
                    rein = ip_list[i],"is offline"
                    ip_online.append(rein)
            for i in range(0,len(ip_list)):
                print ip_online[i][0],ip_online[i][1],"\n"
Schonmal vielen Dank für alle Antworten,
TheNew3000
BlackJack

@TheNew3000: Das ausschalten der Echo-Funktionalität eines Terminals hat überhaupt nichts damit zu tun was Du erreichen willst.

Du musst herausfinden was genau die unerwünschten Ausgaben verursacht und ob und wie man das unterbinden kann.

Als erstes solltest Du aber mal das ``for i in xrange(len(sequence)):`` „anti pattern” loswerden. Man kann in Python *direkt* über die Elemente einer Sequenz iterieren, ohne den unnötigen Umweg über einen Index.

Edit (ungetestet):

Code: Alles auswählen

            first_ip, last_ip = ip_range.split('-')
            ip_status = []
            for ip in IPGenerator(first_ip, last_ip):
                answered_packets, unanswered_packets = sr(
                    IP(dst=ip, ttl=ttl) / ICMP(),
                    retry=retry,
                    timeout=timeout,
                    verbose=0
                )
                if answered_packets or unanswered_packets:
                    ip_status.append(
                        (ip, bool(answered_packets or not unanswered_packets))
                    )

            for ip, is_online in ip_status:
                print ip, 'ist', 'online' if is_online else 'offline', '\n'
TheNew3000
User
Beiträge: 8
Registriert: Montag 3. März 2014, 15:35

Vielen Dank für die schnelle und hilfreiche Antwort,BlackJack :mrgreen:
Jetzt habe ich aber das Problem,dass er immer wenn der Pc nicht existiert,er auch keine Mac-Adresse finden kann,also kommt immer folgende Meldung:

Code: Alles auswählen

WARNING: Mac address to reach destination not found. Using broadcast.
(Also im terminal!)
Und dann zeigt er an,dass alle Pc's online sind,nur meiner nicht...ist das ein Fehler im Programm,oder liegt das daran das er die Daten per Broadcast verschickt?

LG TheNew3000
Antworten