LLabelFen
Робоче середовище з ШІ для коду

Імена DNS зі зворотними вказівниками

Декодуйте ім’я DNS із пакета до 65535 байтів і поверніть початкові мітки та наступне зміщення.

● ● ●LabelFen●
Сценарії · Імена DNS зі зворотними вказівниками ×
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
✳Імена DNS зі зворотними вказівниками
✓ ЗміниПеревірте перед застосуванням ↗
Ілюстрація робочого середовища
01

Проєкт

Перевірте корінь, обрив і межу розгорнутого імені 255 байтів, відхиляючи хибні теги, цикли й вказівники не назад.

02

Перевірте перед застосуванням

Порівняйте фактичну поведінку з очікуваним результатом. Якщо перевірка не проходить, з’ясуйте причину перед наступними змінами.

03

Моделі

Налаштуйте OpenAI-сумісний або Anthropic endpoint із базовою URL-адресою та API-ключем, якщо він потрібен. Перевірте з’єднання. Локальний сервер моделі має працювати; віддалені інструменти можуть окремо передавати дані.

Сценарії

Імена DNS зі зворотними вказівниками

Сценарії ↗
Сценарії
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 переносить супровід протоколів у робоче середовище з ШІ для програмування у Windows. Відкрийте папку проєкту й опишіть потрібну зміну обробки пакета, включно з очікуваннями наступного етапу після розбору. Обговорення, засноване на цих файлах, може пов’язати локальне виправлення з ширшим кодом читання, а не оцінювати допоміжну функцію лише за поверненим значенням.

Стиснені DNS-імена дають приклад завдання. Попросіть модель перевірити обробку вказівників, відхилення некоректного входу й зміщення, повернене коду виклику. Додайте пакет зі стисненим ім’ям, після якого є інше поле. Це дає запропонованому виправленню конкретну вимогу: відновити ім’я, залишивши зовнішній парсер у правильній позиції.

Під час перевірки розрізняйте позицію переходу за вказівником і позицію, з якої має продовжити код виклику. Правдоподібне декодоване ім’я не доводить, що наступне поле буде прочитане правильно. Запустіть відповідні тести з обрізаними й коректними пакетами, перевірте кінцеве зміщення та порівняйте результат зовнішнього парсера перед прийняттям зміни.

Можна вибрати аблітеровану модель ШІ, яку пропонує підтримувана кінцева точка, сумісна з OpenAI, або Anthropic, з обліковими даними за потреби. Обмеження її відповідей, інструменти й межі контексту залежать від моделі та сервера. LabelFen підтримує обговорення проєкту; ваша перевірка й тестові дані протоколу дають докази для рішення щодо програми.

Відстеження виправлення розбору протоколу

Навіщо перевіряти повернене зміщення разом з ім’ям?

Код виклику може використовувати це зміщення для читання наступного поля. Правильне ім’я з неправильною позицією продовження може зіпсувати тлумачення решти пакета. Додайте наступне поле до тестових даних і явно перевірте обидва результати.

Чи має малий парсер приймати всі форми вказівників?

Приймайте лише форми, підтримувані задокументованим контрактом. Порівняйте реалізацію з цією підмножиною перед її розширенням. Попросіть модель визначити нові допустимі входи, щоб очищення коду непомітно не змінило правила прийняття протоколу.

Що робить тестовий обрізаний пакет корисним?

Він має закінчуватися на змістовній межі, наприклад на неповному вказівнику або мітці, та визначати очікуване відхилення. Перевірте, чи парсер завершується помилкою до читання недоступних байтів, а потім перевірте обробку помилки зовнішнім кодом читання.

Чи може перевірка пакетів розкрити дані за межами мого комп’ютера?

Так, залежно від налаштувань кінцевої точки й інструментів. Віддавайте перевагу очищеним байтовим тестовим даним і перевіряйте адресатів перед передаванням захоплених пакетів. Окремий локальний сервер моделі не робить кожен підключений інструмент перевірки або зовнішню службу локальними.

Завантажити для Windows ↗

LabelFen · Оновлено 2026-10-25