Ich versuche, einen einfachen Telnet-Server, der die Benutzernamen/Passwort-Paare von den Bots da draußen protokolliert, die brute zwingen schwachen Telnet-Anmeldeinformationen (Mirai, Gafgyt , etc.). Ich versuche, Twisted für diesen Zweck zu verwenden, da es scheint, die modernste Technologie für solche Zwecke zu sein.Telenet-Server in Twisted bekommt "Unhandled Fehler in Deferred" Fehler
Das ist, was ich bisher gemacht habe:
#!/usr/bin/env python
from twisted.conch.telnet import TelnetTransport, TelnetProtocol, ECHO
from twisted.internet.protocol import ServerFactory
from twisted.application.internet import TCPServer
from twisted.application.service import Application
from twisted.internet import reactor
import logging
class TelnetEcho(TelnetProtocol):
ip = ''
user = ''
state = ''
line = ''
def connectionMade(self):
self.ip = self.transport.getPeer().host
self.transport.write('Username: ')
self.transport.will(ECHO)
self.state = 'User'
def dataReceived(self, data):
if self.state != 'Password':
self.transport.write(data)
self.line += data
if data == '\n':
self.processLine()
self.line = ''
return
def processLine(self):
if self.state == 'User':
self.user = self.line.strip()
self.transport.write('Password: ')
self.state = 'Password'
elif self.state == 'Password':
print 'IP: ' + self.ip + ', user:' + self.user + ', pass:' + self.line.strip()
logging.info(self.ip + ',' + self.user + ',' + self.line.strip())
self.transport.write('\r\nIncorrect password or username.\r\n')
self.transport.write('Username: ')
self.state = 'User'
def CreateMyFactory():
factory = ServerFactory()
factory.protocol = lambda: TelnetTransport(TelnetEcho)
return factory
if __name__ == "__main__":
logging.basicConfig(filename='telnet.log', format='%(message)s', level=logging.DEBUG)
logging.info('Tmestamp,IP,Username,Password')
for handler in logging.root.handlers[:]:
logging.root.removeHandler(handler)
logging.basicConfig(filename='telnet.log', format='%(asctime)s,%(message)s', datefmt='%Y-%m-%d %H:%M:%S', level=logging.DEBUG)
MyFactory = CreateMyFactory()
reactor.listenTCP(23, MyFactory)
reactor.run()
Und es funktioniert meistens gut - ich meine, Bots versuchen einzuloggen und es meldet sich die Anmeldeinformationen verwenden sie - aber ich halte Unhandled error in Deferred
Fehler bekommen, die verlassen Ich bin völlig verwirrt. Ich benutze keine Deferreds, zumindest nicht absichtlich. Was verursacht die Fehler und wie kann das Problem behoben werden?
Interessanterweise erscheint der Fehler nicht, wenn ich manuell auf den Server telnet und versuche, einen Benutzernamen/ein Passwort selbst einzugeben; Sie erscheinen nur, wenn die Bots versuchen, sich anzumelden. Ich schätze, die Bots versuchen etwas zu tun, was mein Server nicht berücksichtigt, aber ich kann nicht herausfinden, was ich tun soll.
Edit:
ich das Skript geändert haben den Twisted-Logger anstelle des Python-Logger zu verwenden. Jetzt bekomme ich ein paar zusätzliche Informationen im Log. Zuerst erhalte ich die folgende Warnung:
2017-09-06 16:17:01+0300 [-] Warning: primary log target selected twice at <c:\python\lib\site-packages\twisted\application\app.py:212> - previously selected at <c:\python\lib\site-packages\twisted\python\log.py:214>. Remove one of the calls to beginLoggingTo.
Ich nehme an, das ist ein Fehler in Twisted.
Wenn als nächstes die „Nicht behandelte Fehler in Latente“ Fehler auftritt, ich diese bekomme ich das Protokoll:
2017-09-06 16:33:33+0300 [-] Unhandled error in Deferred:
2017-09-06 16:33:33+0300 [-] Unhandled Error
Traceback (most recent call last):
Failure: twisted.conch.telnet.OptionRefused: twisted.conch.telnet.OptionRefused:'\x01'
Irgendwelche Ideen, wie es zu beheben?
Bitte fügen Sie den vollständigen, genauen Fehler in Ihre Frage (Kopieren/Einfügen). –
Uhm, aber ich tat es. Die genaue Fehlermeldung lautet "Unhandled error in Deferred:", die auf der Konsole gedruckt wird. Offensichtlich kein kritischer Fehler, weil das Skript nicht bricht und es gibt kein Backtrace, aber es ist _some_ Art von Fehler oder Warnung, weil es nicht mein Skript ist, das es anzeigt. – bontchev
Wenn das alles ist, dann denke ich, dass Sie eine Version von Twisted verwenden, die diesen Logging-Fehler hat:. Wenn das der Fall ist, gibt es nützliche Details über den Fehler, die stillschweigend gelöscht werden.Es würde helfen, sie zu sehen - vielleicht durch Ändern der Protokollierungskonfiguration, um das Problem zu vermeiden, durch Herunterstufen auf eine ausreichend alte Version von Twisted oder durch Beheben des Fehlers und anschließendes Aktualisieren. –