From ff89de7fdc3dee072c8cbc101c930d823cf153c1 Mon Sep 17 00:00:00 2001 From: Starnakin Date: Mon, 16 Jun 2025 01:16:16 +0200 Subject: [PATCH] fix: timeout changed to 2s + invalid free fix when the socket creation fails --- Makefile | 2 +- include/response.h | 2 +- src/packet.c | 14 ++------------ src/scan.c | 7 +++++++ src/thread.c | 4 +--- 5 files changed, 12 insertions(+), 17 deletions(-) diff --git a/Makefile b/Makefile index e56b23b..165fb98 100644 --- a/Makefile +++ b/Makefile @@ -16,7 +16,7 @@ obj/%.o: src/%.c $(CC) $(CFLAGS) -c $< -o $@ $(NAME): $(OBJ) - $(LD) $(LDFLAGS) -o $(NAME) $(OBJ) + $(LD) -o $(NAME) $(OBJ) $(LDFLAGS) clean: rm -rf obj diff --git a/include/response.h b/include/response.h index 46e8785..3d611a9 100644 --- a/include/response.h +++ b/include/response.h @@ -7,7 +7,7 @@ #include "scan.h" -#define TIMEOUT 5 +#define TIMEOUT 2 typedef enum { CLOSED, diff --git a/src/packet.c b/src/packet.c index 3b11c92..d96baba 100644 --- a/src/packet.c +++ b/src/packet.c @@ -74,14 +74,10 @@ static void *create_packet(const struct scan *data, size_t packet_size) iphdr->check = checksum(packet, packet_size); - // this is starnakin stuff - switch ((int)isudp) { - case true: + if (isudp) create_udp_packet(packet + sizeof(struct iphdr), data); - break; - default: + else create_tcp_packet(packet + sizeof(struct iphdr), data); - } return packet; } @@ -98,12 +94,6 @@ int send_packet(const struct scan *data, int sockfd) : sizeof(struct tcphdr)); void *packet = create_packet(data, packet_size); - int one = 1; - const int *val = &one; - if (setsockopt(sockfd, IPPROTO_IP, IP_HDRINCL, val, sizeof(one)) < 0) { - perror("Error setting IP_HDRINCL"); - return -1; - } sendto(sockfd, packet, packet_size, 0, (struct sockaddr *)&conn_addr, sizeof(struct sockaddr_in)); diff --git a/src/scan.c b/src/scan.c index 058b519..3e54654 100644 --- a/src/scan.c +++ b/src/scan.c @@ -64,6 +64,13 @@ int scan(struct scan *data) return -1; } + int one = 1; + const int *val = &one; + if (setsockopt(sockfd, IPPROTO_IP, IP_HDRINCL, val, sizeof(one)) < 0) { + perror("Error setting IP_HDRINCL"); + return -1; + } + char errbuf[PCAP_ERRBUF_SIZE]; bpf_u_int32 net, mask; diff --git a/src/thread.c b/src/thread.c index 5fc0913..b7a7365 100644 --- a/src/thread.c +++ b/src/thread.c @@ -25,10 +25,8 @@ void *routine(void *p_data) scan_data.port_end = port; scan_data.responses = &thread_data->responses[port - thread_data->port_start]; - if (scan(&scan_data)) { - free(p_data); + if (scan(&scan_data)) return NULL; - } } return NULL;