fix: overwrite of ports when multithreading
feature: service name
This commit is contained in:
16
src/thread.c
16
src/thread.c
@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user