From 4584e719e1c8675714894f9a3da7b7e211d449cb Mon Sep 17 00:00:00 2001 From: yrutschle Date: Sun, 1 Aug 2021 22:01:59 +0200 Subject: [PATCH] added hardcoded probe for Teamspeak3 --- probe.c | 7 +++++++ sslh-conf.c | 27 +++++++++++++++++++++++++-- sslh-conf.h | 4 ++-- sslhconf.cfg | 12 ++++++++++++ test.cfg | 1 + 5 files changed, 47 insertions(+), 4 deletions(-) diff --git a/probe.c b/probe.c index 7c962b4..38b867c 100644 --- a/probe.c +++ b/probe.c @@ -39,6 +39,7 @@ static int is_tls_protocol(const char *p, ssize_t len, struct sslhcfg_protocols_ static int is_adb_protocol(const char *p, ssize_t len, struct sslhcfg_protocols_item*); static int is_socks5_protocol(const char *p, ssize_t len, struct sslhcfg_protocols_item*); static int is_quick_protocol(const char *p, ssize_t len, struct sslhcfg_protocols_item*); +static int is_teamspeak_protocol(const char *p, ssize_t len, struct sslhcfg_protocols_item*); static int is_true(const char *p, ssize_t len, struct sslhcfg_protocols_item* proto) { return 1; } /* Table of protocols that have a built-in probe @@ -54,6 +55,7 @@ static struct protocol_probe_desc builtins[] = { { "adb", is_adb_protocol }, { "socks5", is_socks5_protocol }, { "quick50", is_quick_protocol }, + { "teamspeak", is_teamspeak_protocol }, { "anyprot", is_true } }; @@ -304,6 +306,11 @@ static int is_quick_protocol(const char *p, ssize_t len, struct sslhcfg_protocol return memmem(p, len, "Q050", 4) ? 1 : 0; } +static int is_teamspeak_protocol(const char *p, ssize_t len, struct sslhcfg_protocols_item* proto) +{ + return memmem(p, len, "TS3INIT1", 8) ? 1 : 0; +} + static int regex_probe(const char *p, ssize_t len, struct sslhcfg_protocols_item* proto) { #ifdef ENABLE_REGEX diff --git a/sslh-conf.c b/sslh-conf.c index 0a90651..86e1e6b 100644 --- a/sslh-conf.c +++ b/sslh-conf.c @@ -1,8 +1,8 @@ /* Generated by conf2struct (https://www.rutschle.net/tech/conf2struct/README) - * on Sat Jul 31 23:32:53 2021. + * on Sun Aug 1 21:58:56 2021. # conf2struct: generate libconf parsers that read to structs -# Copyright (C) 2018-2019 Yves Rutschle +# Copyright (C) 2018-2021 Yves Rutschle # All rights reserved. # # Redistribution and use in source and binary forms, with or without @@ -465,6 +465,7 @@ struct arg_file* sslhcfg_conffile; struct arg_str* sslhcfg_adb; struct arg_str* sslhcfg_socks5; struct arg_str* sslhcfg_quick50; + struct arg_str* sslhcfg_teamspeak; struct arg_str* sslhcfg_anyprot; struct arg_end* sslhcfg_end; @@ -1019,6 +1020,15 @@ static struct compound_cl_target sslhcfg_anyprot_targets [] = { { 0 } }; +static struct compound_cl_target sslhcfg_teamspeak_targets [] = { + { & table_sslhcfg_protocols[0], 0, .value.def_string = "teamspeak" }, + { & table_sslhcfg_protocols[1], 1, .value.def_string = "0" }, + { & table_sslhcfg_protocols[2], 2, .value.def_string = "0" }, + { & table_sslhcfg_protocols[4], 0, .value.def_bool = 1 }, + { & table_sslhcfg_protocols[9], 0, .value.def_int = 1 }, + { 0 } +}; + static struct compound_cl_target sslhcfg_quick50_targets [] = { { & table_sslhcfg_protocols[0], 0, .value.def_string = "quick50" }, { & table_sslhcfg_protocols[1], 1, .value.def_string = "0" }, @@ -1224,6 +1234,18 @@ static struct compound_cl_arg compound_cl_args[] = { .override_const = "quick50", }, + { /* arg: teamspeak */ + .regex = "(.+):(\\w+)", + .arg_cl = & sslhcfg_teamspeak, + .base_entry = & table_sslhcfg [13], + .targets = sslhcfg_teamspeak_targets, + + + .override_desc = & table_sslhcfg_protocols [0], + .override_matchindex = 0, + .override_const = "teamspeak", + }, + { /* arg: anyprot */ .regex = "(.+):(\\w+)", .arg_cl = & sslhcfg_anyprot, @@ -1914,6 +1936,7 @@ int sslhcfg_cl_parse(int argc, char* argv[], struct sslhcfg_item* cfg) sslhcfg_adb = arg_strn(NULL, "adb", "", 0, 10, "Set up ADB (Android Debug) target"), sslhcfg_socks5 = arg_strn(NULL, "socks5", "", 0, 10, "Set up socks5 target"), sslhcfg_quick50 = arg_strn(NULL, "quick50", "", 0, 10, "Set up QUICK-50 target"), + sslhcfg_teamspeak = arg_strn(NULL, "teamspeak", "", 0, 10, "Set up Teamspeak3 target"), sslhcfg_anyprot = arg_strn(NULL, "anyprot", "", 0, 10, "Set up default target"), sslhcfg_end = arg_end(10) diff --git a/sslh-conf.h b/sslh-conf.h index e738d74..4219d21 100644 --- a/sslh-conf.h +++ b/sslh-conf.h @@ -1,8 +1,8 @@ /* Generated by conf2struct (https://www.rutschle.net/tech/conf2struct/README) - * on Sat Jul 31 23:32:53 2021. + * on Sun Aug 1 21:58:56 2021. # conf2struct: generate libconf parsers that read to structs -# Copyright (C) 2018-2019 Yves Rutschle +# Copyright (C) 2018-2021 Yves Rutschle # All rights reserved. # # Redistribution and use in source and binary forms, with or without diff --git a/sslhconf.cfg b/sslhconf.cfg index 5e8b1ba..efb8cde 100644 --- a/sslhconf.cfg +++ b/sslhconf.cfg @@ -232,6 +232,18 @@ cl_groups: ( { path: "log_level"; value: 1 } ); }, + { name: "teamspeak"; pattern: "(.+):(\w+)"; description: "Set up Teamspeak3 target"; + list: "protocols"; + override: "name"; + argdesc: ""; + targets: ( + { path: "name"; value: "teamspeak" }, + { path: "host"; value: "$1" }, + { path: "port"; value: "$2" }, + { path: "is_udp"; value: "1" }, + { path: "log_level"; value: 1 } + ); + }, { name: "anyprot"; pattern: "(.+):(\w+)"; description: "Set up default target"; list: "protocols"; override: "name"; diff --git a/test.cfg b/test.cfg index fe71a00..5fa4189 100644 --- a/test.cfg +++ b/test.cfg @@ -32,6 +32,7 @@ protocols: { name: "xmpp"; host: "localhost"; port: "9009"; }, { name: "adb"; host: "localhost"; port: "9010"; }, { name: "quick50"; host: "localhost"; is_udp: true; port: "9011"; }, + { name: "teamspeak"; host: "localhost"; is_udp: true; port: "9012"; }, { name: "regex"; host: "ip4-localhost"; is_udp: true; port: "9020"; udp_timeout: 30; regex_patterns: [ "^foo" ];