fix: overwrite of ports when multithreading

feature: service name
This commit is contained in:
0x35c
2025-05-31 10:21:18 +02:00
parent f35cad887d
commit ee2af274d9
4 changed files with 48 additions and 15 deletions

View File

@ -14,6 +14,7 @@
bool g_start = false;
pthread_mutex_t g_start_mtx;
pthread_mutex_t g_getservent;
void *routine(void *p_data)
{
@ -37,8 +38,7 @@ void *routine(void *p_data)
for (uint16_t port = thread_data->port_start;
port <= thread_data->port_end; port++) {
scan_data.port = port;
scan_data.response =
&thread_data->responses[port - thread_data->port_start];
scan_data.response = &thread_data->responses[port - 1];
if (scan(&scan_data)) {
free(p_data);
return NULL;
@ -89,7 +89,9 @@ int create_threads(const struct option_lst *options, char *ip_addr,
return -1;
const char *arg = get_option_arg(options, FL_SPEEDUP);
if (!arg) {
// Launche single thread routine if it's a 1 port scan or if no speedup
// option was passed
if (!arg || !port_end) {
struct thread *thread_data =
init_threads_data(options, ip_addr, &host, responses, 1);
thread_data->port_start = port_start;
@ -112,12 +114,14 @@ int create_threads(const struct option_lst *options, char *ip_addr,
}
pthread_mutex_init(&g_start_mtx, NULL);
pthread_mutex_init(&g_getservent, NULL);
const uint16_t ports_per_thread = (port_end - port_start) / nb_threads;
uint16_t remaining_ports = (port_end - port_start) % nb_threads;
const uint16_t ports_per_thread =
(port_end - port_start + 1) / nb_threads;
uint16_t remaining_ports = (port_end - port_start + 1) % nb_threads;
for (uint8_t i = 0; i < nb_threads; i++) {
threads_data[i].port_start = port_start + i * ports_per_thread;
threads_data[i].port_end = port_start +
threads_data[i].port_end = (port_start - 1) +
(i + 1) * ports_per_thread +
(remaining_ports ? 1 : 0);
if (remaining_ports) {