masscan-mark-ii/src/templ-payloads.h

115 lines
3.2 KiB
C

#ifndef TEMPL_PAYLOADS_H
#define TEMPL_PAYLOADS_H
#include <stdio.h>
#include <stdint.h>
struct MassIP;
/**
* Regression test this module.
* @return
* 0 on success, or positive integer on failure.
*/
int
templ_payloads_selftest(void);
/**
* Create this module. Must be matched with the 'destroy()' function on exit
*/
struct PayloadsUDP *
payloads_udp_create(void);
struct PayloadsUDP *
payloads_oproto_create(void);
/**
* Free the resources of an object created with a matching call to
* 'payloads_create()'
*/
void
payloads_udp_destroy(struct PayloadsUDP *payloads);
void
payloads_oproto_destroy(struct PayloadsUDP *payloads);
/**
* Read payloads from an "nmap-payloads" formatted file. The caller is
* responsible for opening/closing the file, but should passing the
* filename so that we can print helpful error messages.
*/
void
payloads_udp_readfile(FILE *fp, const char *filename,
struct PayloadsUDP *payloads);
/**
* Read payloads from a libpcap formatted file.
*/
void
payloads_read_pcap(const char *filename, struct PayloadsUDP *payloads, struct PayloadsUDP *oproto_payloads);
/**
* Called to remove any payloads that aren't be used in the scan. This makes
* lookups faster when generating packets.
*/
void
payloads_udp_trim(struct PayloadsUDP *payloads, const struct MassIP *targets);
void
payloads_oproto_trim(struct PayloadsUDP *payloads, const struct MassIP *targets);
/**
* The port scanner creates a "cookie" for every packet that it sends, which
* will be a 64-bit value, whose low-order bits will be trimmed to fit whatever
* size is available. For TCP, this becomes the 32-bit seqno of the SYN packet.
* For UDP protocols, however, each application layer protocol will be
* different. For example, SNMP can use a 32-bit transaction ID, whereas DNS
* can use only a 16-bit transaction ID.
*/
typedef unsigned (*SET_COOKIE)(unsigned char *px, size_t length,
uint64_t seqno);
/**
* Given a UDP port number, return the payload we have that is associated
* with that port number.
* @param payloads
* A table full over payloads.
* @param port
* The input port number.
* @param px
* The returned payload bytes.
* @param length
* The returned count of payload bytes.
* @param source_port
* The returned port that should be used when sending packets.
* @param xsum
* The returned partial checksum of the payload bytes, so that it
* doesn't need to be recalculated for every packet.
* @param set_cookie
* The returned function that will set the "cookie" field in the
* packet for each transmission
*/
int
payloads_udp_lookup(
const struct PayloadsUDP *payloads,
unsigned port,
const unsigned char **px,
unsigned *length,
unsigned *source_port,
uint64_t *xsum,
SET_COOKIE *set_cookie);
int
payloads_oproto_lookup(
const struct PayloadsUDP *payloads,
unsigned port,
const unsigned char **px,
unsigned *length,
unsigned *source_port,
uint64_t *xsum,
SET_COOKIE *set_cookie);
#endif