Простой сканер TCP-портов на Ассемблере.
Здравствуйте, дорогие друзья.
Написание сканера портов на ассемблере является сложной задачей, потому что это требует глубоких знаний сетевых протоколов и системного программирования. Кроме того, реализация будет сильно отличаться в зависимости от используемой операционной системы и архитектуры процессора.
Тем не менее, я могу показать Вам пример простого сканера TCP портов на ассемблере для Linux, на архитектуре x86-64, с использованием системных вызовов. Для создания и использования сетевых сокетов нам понадобятся системные вызовы socket, connect, close и т.д.
Вот основная структура программы на ассемблере, использующая NASM синтаксис:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
section .data server_ip db '127.0.0.1', 0 ; Локальный IP-адрес для сканирования port dw 8000 ; Начальный порт для сканирования section .bss sock resb 1 section .text global _start _start: ; Создаем сокет mov eax, 41 ; Системный вызов socket mov edi, 2 ; AF_INET (IPv4) mov esi, 1 ; SOCK_STREAM (TCP) mov edx, 0 ; Протокол по умолчанию syscall mov [sock], eax ; Сохраняем дескриптор сокета ; Подготавливаем адресную структуру mov rdi, rsp ; Используем стек для структуры sockaddr mov word [rdi], 0x0200 ; AF_INET mov word [rdi+2], port ; Порт ; Конвертируем IP в сетевой порядок байтов - это будет сложнее и требует дополнительного кода ; Пробуем подключиться mov eax, 42 ; Системный вызов connect mov rsi, rdi ; Указываем адрес структуры sockaddr mov edx, 16 ; Размер структуры sockaddr_in syscall ; Проверяем результат подключения test eax, eax jz .port_open jmp .port_closed .port_open: ; Обрабатываем открытый порт ; Выводим сообщение или делаем другие действия jmp .cleanup .port_closed: ; Обрабатываем закрытый порт ; Выводим сообщение или делаем другие действия .cleanup: ; Закрываем сокет mov eax, 3 ; Системный вызов close mov edi, [sock] ; Дескриптор сокета syscall ; Завершаем программу mov eax, 60 ; Системный вызов exit xor edi, edi ; Код возврата 0 syscall |
Обратите внимание, что код не полный и требует дополнительных деталей, таких как преобразование IP-адреса в сетевой порядок байтов, обработку ошибок, цикл сканирования портов и так далее. Кроме того, для запуска кода, возможно, потребуются права администратора, так как сетевые операции часто ограничены системой безопасности.
Этот код также предполагает, что Вы знакомы с системой сборки и запуска ассемблерного кода на Вашей машине, и что у Вас установлен NASM для ассемблирования и линковки программы. Перед запуском такого рода программы важно убедиться, что Вы не нарушаете законов или политики безопасности, так как сканирование портов может быть незаконным в некоторых контекстах.
На этом все. Всем хорошего дня!