OpenVAS Libraries  9.0.1
Data Structures | Macros | Functions
nasl_builtin_synscan.c File Reference
#include <unistd.h>
#include <stdlib.h>
#include <arpa/inet.h>
#include <string.h>
#include <netinet/tcp.h>
#include <netinet/ip.h>
#include "../misc/arglists.h"
#include "../misc/bpf_share.h"
#include "../misc/pcap_openvas.h"
#include "../misc/plugutils.h"
#include "../misc/openvas_logging.h"
#include "../misc/prefs.h"
#include "../misc/network.h"
#include "nasl_lex_ctxt.h"

Data Structures

struct  pseudohdr
 
struct  list
 

Macros

#define _BSD_SOURCE   1
 
#define _DEFAULT_SOURCE   1
 
#define NUM_RETRIES   2
 

Functions

unsigned long maketime ()
 
struct timeval timeval (unsigned long val)
 
unsigned long compute_rtt (unsigned long then)
 
int packetdead (unsigned long then, unsigned long rtt)
 
int rawsocket (int family)
 Opens and returns a raw socket. More...
 
int openbpf (struct in_addr dst, struct in_addr *src, int magic)
 Opens a packet filter, grabs packets from dst to port magic. More...
 
int v6_openbpf (struct in6_addr *dst, struct in6_addr *src, int magic)
 
struct listget_packet (struct list *l, unsigned short dport)
 
struct listadd_packet (struct list *l, unsigned short dport, unsigned long ack)
 If no packet with dport is in list, prepends a "packet" to the. More...
 
struct listrm_packet (struct list *l, unsigned short dport)
 
struct listrm_dead_packets (struct list *l, unsigned long rtt, int *retry)
 
struct tcphdr * extracttcp (char *pkt, int len)
 
struct tcphdr * v6_extracttcp (char *pkt, int len)
 
unsigned long extractack (char *pkt, int len, int family)
 
unsigned short extractsport (char *pkt, int len, int family)
 
int issynack (char *pkt, int len, int family)
 
char * mktcp (struct in_addr src, int sport, struct in_addr dst, int dport, unsigned long th_ack, unsigned char flag)
 
char * mktcpv6 (struct in6_addr *src, int sport, struct in6_addr *dst, int dport, unsigned long th_ack, unsigned char flag)
 
struct listsendpacket (int soc, int bpf, int skip, struct in_addr dst, struct in_addr src, int dport, int magic, struct list *packets, unsigned long *rtt, int sniff, struct arglist *env)
 
struct listv6_sendpacket (int soc, int bpf, int skip, struct in6_addr *dst, struct in6_addr *src, int dport, int magic, struct list *packets, unsigned long *rtt, int sniff, struct arglist *env)
 
int scan (struct arglist *env, char *hostname, char *portrange, struct in6_addr *dst6, unsigned long rtt)
 
tree_cellplugin_run_synscan (lex_ctxt *lexic)
 

Macro Definition Documentation

◆ _BSD_SOURCE

#define _BSD_SOURCE   1

◆ _DEFAULT_SOURCE

#define _DEFAULT_SOURCE   1

◆ NUM_RETRIES

#define NUM_RETRIES   2

Function Documentation

◆ add_packet()

struct list* add_packet ( struct list l,
unsigned short  dport,
unsigned long  ack 
)

If no packet with dport is in list, prepends a "packet" to the.

list l.

◆ compute_rtt()

unsigned long compute_rtt ( unsigned long  then)

◆ extractack()

unsigned long extractack ( char *  pkt,
int  len,
int  family 
)

◆ extractsport()

unsigned short extractsport ( char *  pkt,
int  len,
int  family 
)

◆ extracttcp()

struct tcphdr* extracttcp ( char *  pkt,
int  len 
)

◆ get_packet()

struct list* get_packet ( struct list l,
unsigned short  dport 
)
Returns
First pointer to list in l with the given dport , NULL if no such list item could be found.

◆ issynack()

int issynack ( char *  pkt,
int  len,
int  family 
)

◆ maketime()

unsigned long maketime ( )

◆ mktcp()

char* mktcp ( struct in_addr  src,
int  sport,
struct in_addr  dst,
int  dport,
unsigned long  th_ack,
unsigned char  flag 
)

◆ mktcpv6()

char* mktcpv6 ( struct in6_addr *  src,
int  sport,
struct in6_addr *  dst,
int  dport,
unsigned long  th_ack,
unsigned char  flag 
)

◆ openbpf()

int openbpf ( struct in_addr  dst,
struct in_addr *  src,
int  magic 
)

Opens a packet filter, grabs packets from dst to port magic.

Parameters
[out]srcin_addr of source.
[in]dstDestination.
[in]magicDestination port on src to listen to.
Returns
A bpf that listens to tcp packets coming from dst to port magic.

◆ packetdead()

int packetdead ( unsigned long  then,
unsigned long  rtt 
)

◆ plugin_run_synscan()

tree_cell* plugin_run_synscan ( lex_ctxt lexic)

◆ rawsocket()

int rawsocket ( int  family)

Opens and returns a raw socket.

◆ rm_dead_packets()

struct list* rm_dead_packets ( struct list l,
unsigned long  rtt,
int *  retry 
)

◆ rm_packet()

struct list* rm_packet ( struct list l,
unsigned short  dport 
)

◆ scan()

int scan ( struct arglist env,
char *  hostname,
char *  portrange,
struct in6_addr *  dst6,
unsigned long  rtt 
)
Returns
-1 if the socket could not be opened (error), 0 otherwise.

This will send packets to ports not in ports list, will it?

Todo:
How to do this for ipv6? This causes much scan delay for IPv6.

◆ sendpacket()

struct list* sendpacket ( int  soc,
int  bpf,
int  skip,
struct in_addr  dst,
struct in_addr  src,
int  dport,
int  magic,
struct list packets,
unsigned long *  rtt,
int  sniff,
struct arglist env 
)
Parameters
sniffIf != 0, "sniff" (listen to incoming packages), else just add packet.

◆ timeval()

struct timeval timeval ( unsigned long  val)

◆ v6_extracttcp()

struct tcphdr* v6_extracttcp ( char *  pkt,
int  len 
)

◆ v6_openbpf()

int v6_openbpf ( struct in6_addr *  dst,
struct in6_addr *  src,
int  magic 
)

◆ v6_sendpacket()

struct list* v6_sendpacket ( int  soc,
int  bpf,
int  skip,
struct in6_addr *  dst,
struct in6_addr *  src,
int  dport,
int  magic,
struct list packets,
unsigned long *  rtt,
int  sniff,
struct arglist env 
)