aboutsummaryrefslogtreecommitdiff
path: root/server
diff options
context:
space:
mode:
authorauth <[email protected]>2020-07-11 23:19:24 +0200
committerauth <[email protected]>2020-07-11 23:19:24 +0200
commit883aafaf87ec22aa4c9142ac5c836040a0f531b4 (patch)
tree38a73a202d815719991efeecfd3769dea7d20984 /server
parentAdded blacklist implementation on server. (diff)
downloadloader-883aafaf87ec22aa4c9142ac5c836040a0f531b4.tar.xz
loader-883aafaf87ec22aa4c9142ac5c836040a0f531b4.zip
Small changes.
Diffstat (limited to 'server')
-rw-r--r--server/src/client/blacklist.h6
-rw-r--r--server/src/client/client.cpp4
-rw-r--r--server/src/image/pe.h3
-rw-r--r--server/src/main.cpp74
-rw-r--r--server/src/server/packet.h15
-rw-r--r--server/src/server/server.cpp12
-rw-r--r--server/src/util/io.cpp1
7 files changed, 69 insertions, 46 deletions
diff --git a/server/src/client/blacklist.h b/server/src/client/blacklist.h
index ea9e261..397dc6c 100644
--- a/server/src/client/blacklist.h
+++ b/server/src/client/blacklist.h
@@ -47,6 +47,12 @@ public:
return true;
}
}
+
+ for(auto &item : m_data["hwids"]) {
+ if(item.get<std::string>() == key) {
+ return true;
+ }
+ }
return false;
}
};
diff --git a/server/src/client/client.cpp b/server/src/client/client.cpp
index 1163ab5..9b46574 100644
--- a/server/src/client/client.cpp
+++ b/server/src/client/client.cpp
@@ -19,7 +19,7 @@ bool tcp::client::init_ssl(SSL_CTX* server_ctx) {
if (ret <= 0) {
int err = SSL_get_error(m_ssl, ret);
- io::logger->error("{} failed to accept ssl, return code {}", m_ip,
+ io::logger->error("{} failed to accept ssl, return code {}.", m_ip,
err);
return false;
}
@@ -42,7 +42,7 @@ int tcp::client::stream(std::vector<char>& data, float *dur/*= nullptr*/) {
auto size = data.size();
auto networked_size = htonl(size);
- int a = write(&networked_size, sizeof(networked_size));
+ write(&networked_size, sizeof(networked_size));
// with 4kb chunk size, speed peaks at 90mb/s without enc
// speed is at ~75mb/s with xor
diff --git a/server/src/image/pe.h b/server/src/image/pe.h
index 7243262..c642672 100644
--- a/server/src/image/pe.h
+++ b/server/src/image/pe.h
@@ -30,6 +30,7 @@ class image {
public:
image(const std::string_view name) : m_image{nullptr} {
if (!io::read_file(name, m_buffer)) {
+ io::logger->error("failed to load image {}.", name);
return;
}
@@ -46,7 +47,7 @@ class image {
void reload(const std::string_view name) {
io::read_file(name, m_buffer);
if (m_buffer.empty()) {
- io::logger->error("failed to reload image {}", name);
+ io::logger->error("failed to reload image {}.", name);
return;
}
diff --git a/server/src/main.cpp b/server/src/main.cpp
index 6628712..779b610 100644
--- a/server/src/main.cpp
+++ b/server/src/main.cpp
@@ -9,14 +9,10 @@ constexpr std::string_view version{"0.1.0"};
int main(int argc, char* argv[]) {
io::init(false);
- // pe::image image("test.dll");
-
tcp::server client_server("6666");
client_server.start();
- // client_server.bl().add({"127.0.0.1", "qsmdlkjqsdmlkqmdsl"});
-
client_server.connect_event.add([&](tcp::client& client) {
auto ip = client.get_ip();
@@ -24,7 +20,7 @@ int main(int argc, char* argv[]) {
client.gen_session();
client.write(tcp::packet_t(version, tcp::packet_type::write, client(),
- tcp::packet_action::session));
+ tcp::packet_id::session));
});
client_server.disconnect_event.add([&](tcp::client& client) {
@@ -33,45 +29,55 @@ int main(int argc, char* argv[]) {
auto it = std::find_if(
client_server().begin(), client_server().end(),
[&](tcp::client& c) { return c.get_socket() == client.get_socket(); });
-
- client_server().erase(it);
+
+ if (it != client_server().end()) {
+ client_server().erase(it);
+ }
io::logger->info("{} disconnected.", client.get_ip());
});
- client_server.receive_event.add(
- [&](tcp::packet_t& packet, tcp::client& client) {
- auto session = client();
- auto packet_session = packet.session_id;
- auto ip = client.get_ip();
- auto message = packet();
- auto action = packet.act;
+ client_server.receive_event.add([&](tcp::packet_t& packet,
+ tcp::client& client) {
+ auto session = client();
+ auto packet_session = packet.session_id;
+ auto ip = client.get_ip();
+ auto message = packet();
+ auto id = packet.id;
+
+ if (!packet) {
+ io::logger->warn("{} sent invalid packet.", ip);
+
+ // client_server.disconnect_event.call(client);
+ return;
+ }
- if (!packet) {
- io::logger->info("{} sent invalid packet.", ip);
+ if (packet_session != session) {
+ io::logger->warn("{} sent wrong session id.", ip);
- //client_server.disconnect_event.call(client);
- return;
- }
+ // client_server.disconnect_event.call(client);
+ return;
+ }
- if (packet_session != session) {
- io::logger->info("{} sent wrong session id.", ip);
- io::logger->info("{} : {}", packet_session, session);
+ io::logger->info("{} : {}", packet_session, message);
- //client_server.disconnect_event.call(client);
- return;
- }
+ if (id == tcp::packet_id::hwid) {
+ client.hwid = message;
- io::logger->info("{} : {}", packet_session, message);
+ // client_server.bl().add({ip, message});
- if (action == tcp::packet_action::hwid) {
- client.hwid = message;
+ io::logger->info("got hwid from {} : {}", ip, message);
- io::logger->info("got hwid from {} : {}", ip, message);
- }
+ if (client_server.bl().find(message)) {
+ io::logger->warn("{} is hwid banned.", ip);
- client.write(tcp::packet_t(message, tcp::packet_type::write, session));
- });
+ client_server.disconnect_event.call(client);
+ return;
+ }
+ }
+
+ client.write(tcp::packet_t(message, tcp::packet_type::write, session));
+ });
client_server.timeout_event.add([&](tcp::client& client) {
client.cleanup();
@@ -80,7 +86,9 @@ int main(int argc, char* argv[]) {
client_server().begin(), client_server().end(),
[&](tcp::client& c) { return c.get_socket() == client.get_socket(); });
- client_server().erase(it);
+ if (it != client_server().end()) {
+ client_server().erase(it);
+ }
io::logger->info("{} timed out.", client.get_ip());
});
diff --git a/server/src/server/packet.h b/server/src/server/packet.h
index 279d140..261109d 100644
--- a/server/src/server/packet.h
+++ b/server/src/server/packet.h
@@ -9,17 +9,17 @@ constexpr size_t message_len = 512;
enum packet_type : int { write = 0, read };
-enum packet_action : uint8_t { message = 0, hwid = 1, session };
+enum packet_id : int { message = 0, hwid, session };
struct packet_t {
std::string message;
std::string session_id;
- uint8_t act;
+ int id;
packet_t() {}
packet_t(const std::string_view msg, const packet_type &type,
std::string_view session = "",
- const packet_action &action = packet_action::message) {
+ const packet_id &action = packet_id::message) {
if (type == read) {
message = msg;
enc::decrypt_message(message);
@@ -30,12 +30,13 @@ struct packet_t {
}
auto json = nlohmann::json::parse(message);
- message = json["message"];
+ id = json["id"];
session_id = json["session_id"];
- act = json["action"];
+ message = json["message"];
+
} else {
nlohmann::json json;
- json["action"] = action;
+ json["id"] = action;
json["session_id"] = session;
json["message"] = msg.data();
@@ -49,7 +50,7 @@ struct packet_t {
~packet_t() {
message.clear();
session_id.clear();
- act = -1;
+ id = -1;
}
operator bool() const { return !message.empty() && !session_id.empty(); }
diff --git a/server/src/server/server.cpp b/server/src/server/server.cpp
index 2d4cafe..91176e1 100644
--- a/server/src/server/server.cpp
+++ b/server/src/server/server.cpp
@@ -17,6 +17,14 @@ void tcp::server::start() {
io::logger->critical("failed to create socket.");
return;
}
+
+ int enable = 1;
+ int ret = setsockopt(m_socket, SOL_SOCKET, SO_REUSEADDR, &enable, sizeof(enable));
+ if (ret < 0) {
+ io::logger->critical("failed to set socket option.");
+ return;
+ }
+
struct addrinfo hints, *addrinfo = nullptr;
memset(&hints, 0, sizeof hints);
@@ -26,7 +34,7 @@ void tcp::server::start() {
hints.ai_protocol = IPPROTO_TCP;
hints.ai_flags = AI_PASSIVE;
- int ret = getaddrinfo(nullptr, m_port.data(), &hints, &addrinfo);
+ ret = getaddrinfo(nullptr, m_port.data(), &hints, &addrinfo);
if (ret != 0) {
io::logger->critical("failed to get address info.");
close(m_socket);
@@ -72,7 +80,7 @@ tcp::select_status tcp::server::peek() {
const int ret = select(maxfd + 1, &m_server_set, nullptr, nullptr, &tv);
if (ret < 0) {
- io::logger->error("select error : {}", strerror(errno));
+ io::logger->error("select error : {}.", strerror(errno));
return tcp::select_status::error;
}
diff --git a/server/src/util/io.cpp b/server/src/util/io.cpp
index d23cdda..8d74cd4 100644
--- a/server/src/util/io.cpp
+++ b/server/src/util/io.cpp
@@ -25,7 +25,6 @@ void io::init(const bool& to_file) {
bool io::read_file(const std::string_view name, std::vector<char>& out) {
std::ifstream file(name.data());
if (!file.good()) {
- io::logger->error("failed to load {}.", name.data());
return false;
}