Python – die besten Beiträge

Python, wo ist hier der Fehler?

Wir erhalten eine Liste mit Elementen, die in eine Datei geschrieben werden sollen. Dazu soll jedes Element der Liste jeweils mit der zusätzlichen Information, an welchem Index wir uns gerade befinden, versehen werden. (Siehe Beispielausgabe in der Tabelle.)

In dieser Aufgabe brauchen wir keinen zusätzlichen print()-Aufruf. Es sollen nur Inhalte in die Datei geschrieben werden; es soll also keine normale Ausgabe der Inhalte geben.

Tipp: Um sowohl Strings als auch Zahlen in die jeweils aktuelle Zeile zu schreiben, können Zahlen mit str() explizit in einen String umgewandelt werden. Dann können alle Teile der Ausgabe mit einem + aneinandergefügt werden.

Zum Beispiel:

filename = "tiere.txt"
elemente = ["Pinguin", "Nashorn", "Chamäleon", "Pinguin"]
Eintrag 1: Pinguin
Eintrag 2: Nashorn
Eintrag 3: Chamäleon
Eintrag 4: Pinguin

filename = "snacks.txt"
elemente = ["Schokolade", "Chips", "Bonbons", "Kuchen", "Käsebrot"]
Eintrag 1: Schokolade
Eintrag 2: Chips
Eintrag 3: Bonbons
Eintrag 4: Kuchen
Eintrag 5: Käsebrot

filename = "farben.txt"
elemente = ["blau", "gelb", "rot", "lila"]
Eintrag 1: blau 
Eintrag 2: gelb
Eintrag 3: rot
Eintrag 4: lila


Und meine Lösung wäre:

def write_to_file(filename, elemente):
    with open(filename, "w") as file:
        for index, element in enumerate(elemente, start=1):
            entry = "Eintrag " + str(index) + ": " + element + "\n"
            file.write(entry)

filename_tiere = "tiere.txt"
elemente_tiere = ["Pinguin", "Nashorn", "Chamäleon", "Pinguin"]
write_to_file(filename_tiere, elemente_tiere)

filename_snacks = "snacks.txt"
elemente_snacks = ["Schokolade", "Chips", "Bonbons", "Kuchen", "Käsebrot"]
write_to_file(filename_snacks, elemente_snacks)

filename_farben = "farben.txt"
elemente_farben = ["blau", "gelb", "rot", "lila"]
write_to_file(filename_farben, elemente_farben)


Computer, programmieren, Informatik, Python

Wie sende ich DNS Cookies mit dnslib?

Ich möchte mit dnslib die DNS-Antworten von den jeweiligen Anfragen mit einem DNS-Cookie versehen. Ich habe auch bereits etwas dafür in meinen Code implementiert, jedoch funktioniert das noch nicht so. Kann mir jemand sagen, was ich da brauche?

Der Code:

import socket
from dnslib import *

DNS_PORT = 53

dns_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
dns_socket.bind(('', DNS_PORT))

print(f"DNS-Server hört auf Port {DNS_PORT}...")

def dns_forward(domain):
    try:
        ip_address = socket.gethostbyname(domain)
        return ip_address
    except socket.error:
        return '185.199.111.153' #Error 404

while True:
    data, address = dns_socket.recvfrom(1024)

    dns_message = DNSRecord.parse(data)
    dns_request = str(dns_message.q.qname)
    
    dns_answer = dns_forward(dns_request)
    
    client_ip = address[0]
    client_port = address[1]

    dns_cookie = ("4096")

    if client_ip == '192.168.0.113'
        dns_response = DNSRecord(DNSHeader(id=dns_message.header.id, qr=1, aa=1, ra=1), q=dns_message.q)
        dns_response.add_answer(RR(dns_request, QTYPE.A, rdata=A(dns_answer)))
        dns_response.add_ar(RR(dns_request, QTYPE.OPT, rdata=TXT(dns_cookie)))
        dns_socket.sendto(dns_response.pack(), address)
    
    print(f"DNS-Anfrage von {client_ip} mit Port {client_port} für {dns_request} die Antwort ist {dns_answer}")

Die Fehlermeldung:

Traceback (most recent call last):
 File "c:\Users\Stoppersocke\Documents\Projects\MDM Bypass\test5.py", line 35, in <module>
  dns_socket.sendto(dns_response.pack(), address)
           ^^^^^^^^^^^^^^^^^^^
 File "C:\Users\Stoppersocke\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\LocalCache\local-packages\Python311\site-packages\dnslib\dns.py", line 339, in pack
  ar.pack(buffer)
 File "C:\Users\Stoppersocke\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\LocalCache\local-packages\Python311\site-packages\dnslib\dns.py", line 885, in pack
  for opt in self.rdata:
TypeError: 'TXT' object is not iterable
DNS, Netzwerktechnik, Programmiersprache, Python, DNS FEHLER, DNS-Server, Python 3

Wie starte ich die While Schleife in Python neu?

Hallo!

Ich programmiere aktuell einen "Vokabelabfrager". Dazu hätte ich eine Frage. Und zwar arbeite ich grafisch mit Tkinter. Doch ich bin gerade in einer While Schleife, in der alles funktioniert, aber dann will die While Schleife sich nicht mehr neustarten, denn sie hat schon erledigt was sie machen sollte, und will nicht weiter abfragen, weil sie dies schon gemacht hat.

Das ist ein Ausschit meines Codes:

weiter = False


def Prüfungs_Start():
    global weiter
    weiter = True
    while weiter == True:
        weiter = False
        Prüfungs_Start_Fenster = Tk()
        Prüfungs_Start_Fenster.title("Prüfung")
        Prüfungs_Start_Fenster.geometry("400x500")
        #Random Zeile finden
        Datei = open("Vokabeln.txt", "a")
        Datei = open("Vokabeln.txt", "r")
        Datei_Anzahl_Zeilen = 0
        for Zeile in Datei:
            Datei_Anzahl_Zeilen += 1
        Datei.seek(0)
        Randomzeile = randint(1, Datei_Anzahl_Zeilen)
        Zähler = 1
        for Zeilen_Inhalt in Datei:
            if Zähler == Randomzeile:
                Random_Zeilen_Inhalt = Zeilen_Inhalt
            Zähler += 1
        #2 Vokabeln, die in der ausgewählten Zeile stehen, in 2 Variablen speichern
        Ort = Random_Zeilen_Inhalt.find("'")
        TestVokabel1 = Random_Zeilen_Inhalt[0:Ort]
        TestVokabel2 = Random_Zeilen_Inhalt[Ort+1:-1]
        Label(Prüfungs_Start_Fenster, text = f"Ausgangs-Vokabel: {TestVokabel1}", font = "Arial_Black 20").place(x = 10, y = 10)
        Eingegebenes_Ergebnis = Entry(Prüfungs_Start_Fenster)
        Eingegebenes_Ergebnis.place(x = 10, y = 50)
        def Prüfung():
            if Eingegebenes_Ergebnis.get() == TestVokabel2:
                Label(Prüfungs_Start_Fenster, text = "Richtig!         ", font = "Arial 21", fg = "green").place(x = 10, y = 180)
            else:
                Label(Prüfungs_Start_Fenster, text = "Leider falsch", font = "Arial 21", fg = "red").place(x = 10, y = 180)


        Button(Prüfungs_Start_Fenster, text = "Fertig", command = Prüfung).place(x = 10, y = 100)
        def Weiter():
            global weiter
            weiter = True
            Prüfungs_Start_Fenster.destroy()
        Button(Prüfungs_Start_Fenster, text = "Weiter", command = Weiter).place(x = 10, y = 130)

Nun habe ich hinten diesen "Weiter" Button, der die Variable "weiter" wieder auf einen anderen Wert weisen soll, um die While Schleife wieder laufen zu lassen. Das möchte sie aber wohl nicht, denn sie hat ja schon abgefragt und da hat es nicht gestimmt.

Wenn ihr wisst, wie ich es schaffen kann, dass die While Schleife neu abfragt, bitte hilft mir,

euer Alex

programmieren, Programmiersprache, Python, Tkinter

Meistgelesene Beiträge zum Thema Python