Basic Bot Network mit Python 2.7

LaVolpe

New member
In diesem Tutorial zeige ich euch wie ein Netzwerk mit Mastern und Bots Programmiert.
Es werden Grundkenntnisse der Sprache Python (2.x) erwartet.
Es schadet auch nicht einen kurzen Blick in die Python Netwerk Library zu werfen.
Nun was ist mit "ein Netzwerk mit Mastern und Bots " gemeint ?
Damit ist ein Botnetzwerk gemeint, der Master kann die Bots ( die PC die das Programm bzw. den Virus haben der den Computer befehle vorgibt ) befehligen.
Der "Master" ist ein Serverprogram das auf dem PC des Hackers läuft, über die Verbindung geht die ganze Kommunikation mit dem Bot ab.

Meine Codebeispiele für das Serverprogramm und den Clienten sind stark an
das Beispiel in der Dokumentation angelehnt.

Zunächst schreiben wir das Programm für den Server.

Code:
# Module
# SocketServer ist das Modul um ein Server samt Socket zu scripten
from SocketServer import *
print "Main Master Bot Server"
print "Das ist der Master, er hat die Kontrolle über die Bots"
print "Sobald ein Bot auf einen anderen PC und mit dem Master
print "verbunden ist, hat man theoretisch vollenzugriff. "
print "Gebt  -help ein um eine Liste mit den Funktionen zu bekommen."
string(raw_input("Bitten ein Kommando angeben: "))
while string != "-exit"
if string == "-help"
		print "Meine Funktionen sind: "
		print "-help : Bringt dir diese Hilfe hier "
		print "-exit : Schließt das Programm "
                print "-lol : Opfer wird gelolt (mit Lol zu gespammt :) )"
                print "-settings : Einstellung der Port Nummer "
	elif string == "-lol"
		print "Das Opfer wird geLOLt"
                lol
	elif string == "-settings"
		PORT(raw_input("Bitte gebe die Nummer des Ports an den du Nutzen willst:"))
	else
		print "Ungültige Eingabe ! "
		print " Siehe -help für weitere Hilfe. "

	class Handler(SocketServer.BaseRequestHandler):
	#Das hier ist der Handler für die Anfragen, sonst wüsste der Server nicht was zu tuen ist :)
    	def handle(self):
		if PORT == 0
			PORT(raw_input("Bitte eine Portnummer angeben:")
       	 # self.request ist der sog. Socket , die Verbindungsschnittstelle zum Client
        	self.data = self.request.recv(1024).strip()
       	 print "{} wrote:".format(self.client_address[0])
      	 print self.data
       	 # just send back the same data, but upper-cased
      	  self.request.sendall(self.data.upper())

	if __name__ == "__main__":
  	  HOST = "localhost"

	    # Hier wird der Server erstellt, es bindet den Server an einen bestimmten Port
	    server = SocketServer.TCPServer((HOST, PORT), MyTCPHandler)
	    server.serve_forever()

def lol
       self.request.sendall("-lol")

Der ClientSocket sollte auf jedenfall für jeden Server richtig "designed" werden.
Da die Kommunikation zwischen Server und Client oft anders ausfällt.

Code:
import socket
import sys

while received != "-exit"
	PORT(raw_input("Portnummer hier angeben:)
	#Bei einem Bot Netzwerk sind die Variabeln Port und Host schon von anfang an so eingestellt 
	#das der Bot automatisch verbinden kann ohne das es zu Problemen kommt

	HOST= "localhost"
	data = " ".join(sys.argv[1:])

	# sock definiert den ClientSocket, SOCK ist für die TCP-Verbindung
	sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

	try:
 	  # Verbindet zum Server und sendet die Daten
 	   sock.connect((HOST, PORT))
 	   sock.sendall(data + "\n")

	    # Die Daten werden hier empfangen 
 	   received = sock.recv(1024)
	finally:
	    sock.close()

	print "Sent:     {}".format(data)
	print "Received: {}".format(received)

	# Hier kommen alle Funktionen die der Bot später machen können sollte rein
	if received == "-lol"
		while lolz != 100
			print "LOLED! PWNED! "
			lolz+1

Ich hoffe ich konnte euch mit diesem Codebeispiel zeigen wie man ein Botnetzwerk prggen kann :)
Der Code ist in der .ZIP Datei nochmal drin.

Ok sorry für die Fehler ich werde mich bemühen diese zu entfernen, ich werde das ganze Beispiel neu überarbeiten.
 
Zuletzt bearbeitet:

Oi!Alex

Member
Er hat ja geschrieben:
"Meine Codebeispiele für das Serverprogramm und den Clienten sind stark an
das Beispiel in der Dokumentation angelehnt."

Und ja der Link von dem wo er es kopiert hat fehlt, was man natürlich nicht positiv bewerten kann.

Abgesehen davon, er ist 14 und weiß einfach (noch?) nicht das man sich nicht mit fremden Federn schmücken sollte.

Btw. Ein Tutorial ist mehr als nur etwas Quellcode mit halb übersetzen Kommentaren.
 

ravenstorm04

New member
Hast du deinen geposteten Code mal ausgeführt?
Allein beim Lesen strotzt der nur so vor Fehlern:
Es fehlen Doppelpunkte, die Einrückung ist kaputt, schliessende Klammern sind teilweise nicht da, nicht deklarierte Variablen werden verwendet...

Ich lauere hier sonst nur, aber deine "Tutorials" lösen bei mir Alarmglocken aus.
Bitte nimm es nicht persönlich, dass ich dir jetzt erneut deine Arbeit schlechtmache,
aber einen gewissen Standard bei Tutorials kann man durchaus erwarten.
Wenn man direkt beim Lesen eines Tutorials offensichtliche Fehler erkennt, ohne überhaupt tiefer zu gehen, dann ist die Qualität des Tutorials nicht sonderlich hoch.:rolleyes:

Ich schreibe mal nichts zu den Copy&Pasta aus der Doku und zusammenstecken, da du wenigstens angegeben hast, dass du da kopiert hast....
Ausschnitte wie

Code:
...
 print self.data
       	 # just send back the same data, but upper-cased
      	  self.request.sendall(self.data.upper())
...

zeigen jedoch deutlich nicht sorgfältige Arbeit und/oder fehlendes Verständnis des Kopierten. Übrigens fehlt auch die ZIP-Datei, welche du hochladen wolltest.

Nimm das bitte nicht als Diss oderso, sondern als Ansporn dich zu verbessern.;)

Regards
 

LaVolpe

New member
Ja ich weis selber ,dass ich in tuts schreiben noch nichts so gut bin.
Das ausführen ging bei mir eigentlich :|
Natürlich werde ich die Fehler ausbessern sobald ich die Zeit dazu finde
 

ravenstorm04

New member
Wenn es obiger Code war, dann kann dieser gar nicht funktionieren.
Beispiel:

Code:
while received != "-exit"
	PORT(raw_input("Portnummer hier angeben:)
muss eigentlich lauten:

Code:
while received != "-exit":
	PORT(raw_input("Portnummer hier angeben:"))

und ich spreche nicht davon, dass received im Client am Anfang nicht deklariert ist und in der Schleife nicht aufgeloest werden kann und einen NameError schmeisst. Und da ist noch mehr. Vielleicht sind die Fehler ja in der noch immer fehlenden ZIP-Datei nicht drin.

Uebrigens halte ich Alter fuer keine Ausrede. Zu dem dies eine Wiederholungstat bezueglich schlechter "Tutorials" ist. Auch wenn man jung ist, kann man gute Tutorials schreiben, ebenso wie "Alte" schlechte Tutorials schreiben koennen.
Das Internet misst die Person anhand der Qualitaet der Beitrage, nicht Quantitaet und Alter und anderen persoenlichen Merkmalen.
 
Oben