Projekt
Teste Wurzel, abgeschnittene Daten und die expandierte Grenze von 255 Bytes, lehne ungültige Markierungen, Zyklen und nicht rückwärts gerichtete Zeiger ab.
Dekodiere einen DNS-Namen aus höchstens 65535 Paketbytes und liefere rohe Labels samt Folgeposition.
def dns_name(data, offset):
if type(data) is not bytes or len(data) > 65535 or type(offset) is not int or not 0 <= offset < len(data):
raise ValueError("dns.input")
labels, seen, pos, end, size = [], set(), offset, None, 1
while True:
if pos in seen or pos >= len(data):
raise ValueError("dns.pointer")
seen.add(pos)
count = data[pos]
if count & 192 == 192:
if pos+1 >= len(data):
raise ValueError("dns.truncated")
target = ((count & 63) << 8) | data[pos+1]
if target >= pos:
raise ValueError("dns.forward")
if end is None:
end = pos+2
pos = target
continue
if count & 192 or pos+1+count > len(data):
raise ValueError("dns.label")
pos += 1
if count == 0:
return labels, pos if end is None else end
size += count+1
if size > 255:
raise ValueError("dns.length")
labels.append(data[pos:pos+count])
pos += count
Teste Wurzel, abgeschnittene Daten und die expandierte Grenze von 255 Bytes, lehne ungültige Markierungen, Zyklen und nicht rückwärts gerichtete Zeiger ab.
Vergleichen Sie das tatsächliche Verhalten mit dem erwarteten Ergebnis. Klären Sie fehlgeschlagene Prüfungen vor weiteren Änderungen.
Richten Sie einen OpenAI-kompatiblen oder Anthropic-Endpunkt mit Basis-URL und gegebenenfalls API-Schlüssel ein. Testen Sie die Verbindung. Ein lokaler Modellserver muss laufen; entfernte Werkzeuge können Daten separat übertragen.
def dns_name(data, offset):
if type(data) is not bytes or len(data) > 65535 or type(offset) is not int or not 0 <= offset < len(data):
raise ValueError("dns.input")
labels, seen, pos, end, size = [], set(), offset, None, 1
while True:
if pos in seen or pos >= len(data):
raise ValueError("dns.pointer")
seen.add(pos)
count = data[pos]
if count & 192 == 192:
if pos+1 >= len(data):
raise ValueError("dns.truncated")
target = ((count & 63) << 8) | data[pos+1]
if target >= pos:
raise ValueError("dns.forward")
if end is None:
end = pos+2
pos = target
continue
if count & 192 or pos+1+count > len(data):
raise ValueError("dns.label")
pos += 1
if count == 0:
return labels, pos if end is None else end
size += count+1
if size > 255:
raise ValueError("dns.length")
labels.append(data[pos:pos+count])
pos += count
LabelFen bringt Protokollwartung in eine KI-Programmierumgebung für Windows. Öffnen Sie den Projektordner und beschreiben Sie das zu ändernde Paketverhalten einschließlich der Erwartungen des nächsten Schritts nach dem Parsen. Ein auf diesen Dateien beruhendes Gespräch kann eine lokale Korrektur mit dem übergeordneten Leser verbinden, statt eine Hilfsfunktion allein nach ihrem Rückgabewert zu beurteilen.
Komprimierte DNS-Namen bieten eine Beispielaufgabe. Lassen Sie das Modell Zeigerbehandlung, Zurückweisung fehlerhafter Eingaben und den an den Aufrufer zurückgegebenen Offset untersuchen. Nehmen Sie ein Paket mit einem komprimierten Namen und einem anschließenden Feld auf. Damit erhält der Patch eine konkrete Anforderung: den Namen rekonstruieren und den umgebenden Parser dabei an der richtigen Position belassen.
Unterscheiden Sie bei der Prüfung, wo einem Zeiger gefolgt wird und wo der Aufrufer fortfahren soll. Ein plausibler dekodierter Name beweist nicht, dass das nächste Feld korrekt gelesen wird. Führen Sie relevante Tests mit abgeschnittenen und gültigen Testdaten aus, untersuchen Sie den endgültigen Offset und vergleichen Sie das Ergebnis des umgebenden Parsers, bevor Sie die Änderung übernehmen.
Sie können ein abliteriertes KI-Modell wählen, das ein unterstützter OpenAI-kompatibler oder Anthropic-Endpunkt anbietet, bei Bedarf mit Zugangsdaten. Einschränkungen seiner Antworten, Werkzeuge und Kontextgrenzen hängen weiterhin von Modell und Server ab. LabelFen unterstützt die Projektbesprechung; Ihre Prüfung und Protokolltestfälle liefern die Nachweise für die Softwareentscheidung.
Der Aufrufer kann diesen Offset zum Lesen des nächsten Felds verwenden. Ein korrekter Name mit falscher Fortsetzungsposition kann die restliche Paketinterpretation beschädigen. Nehmen Sie ein folgendes Feld in den Testfall auf und prüfen Sie beide Ergebnisse ausdrücklich.
Akzeptieren Sie nur Formen, die Ihr dokumentierter Vertrag unterstützt. Vergleichen Sie die Implementierung mit dieser Teilmenge, bevor Sie sie erweitern. Lassen Sie das Modell neu akzeptierte Eingaben benennen, damit eine Bereinigung nicht stillschweigend die Protokollannahmeregeln ändert.
Er sollte an einer aussagekräftigen Grenze enden, etwa bei einem unvollständigen Zeiger oder Label, und die erwartete Zurückweisung angeben. Prüfen Sie, ob der Parser vor dem Zugriff auf nicht vorhandene Bytes scheitert, und anschließend, wie der umgebende Leser den Fehler behandelt.
Je nach Endpunkt- und Werkzeugkonfiguration ja. Bevorzugen Sie bereinigte Byte-Testdaten und prüfen Sie die Ziele, bevor Sie Mitschnitte teilen. Ein separat laufender lokaler Modellserver macht nicht jedes verbundene Analysewerkzeug oder jeden externen Dienst lokal.
LabelFen · Aktualisiert 2026-10-25