working commit
This commit is contained in:
@@ -0,0 +1,61 @@
|
||||
|
||||
extern "C" {
|
||||
#include <netinet/ip.h>
|
||||
#include <arpa/inet.h>
|
||||
}
|
||||
|
||||
#include <expected>
|
||||
#include <string>
|
||||
#include <iostream>
|
||||
#include <format>
|
||||
|
||||
|
||||
#include <interface.hpp>
|
||||
#include <tunclient.hpp>
|
||||
|
||||
|
||||
std::expected<void, std::string> TClient::Create(const std::string name, const std::string addr, const int prefix) {
|
||||
auto createRes = iface.Create(name);
|
||||
if (!createRes) {
|
||||
return std::unexpected(createRes.error());
|
||||
}
|
||||
auto setaddrRes = iface.SetIP4Address(addr);
|
||||
if (!setaddrRes) {
|
||||
return std::unexpected(setaddrRes.error());
|
||||
}
|
||||
auto setprefixRes = iface.SetIP4Netmask(24);
|
||||
if (!setprefixRes) {
|
||||
return std::unexpected(setprefixRes.error());
|
||||
}
|
||||
auto setmtuRes = iface.SetMTU(1240);
|
||||
if (!setmtuRes) {
|
||||
return std::unexpected(setmtuRes.error());
|
||||
}
|
||||
auto upRes = iface.Up();
|
||||
if (!upRes) {
|
||||
return std::unexpected(upRes.error());
|
||||
}
|
||||
return {};
|
||||
}
|
||||
|
||||
std::expected<void, std::string> TClient::Run() {
|
||||
while (true) {
|
||||
auto readRes = iface.Read();
|
||||
if (!readRes) {
|
||||
std::cerr << std::format("Error: {}\n", readRes.error());
|
||||
}
|
||||
auto value = readRes.value();
|
||||
std::cerr << std::format("Packet size: {}\n", value.size());
|
||||
struct iphdr* iphdr = (struct iphdr*)(value.data());
|
||||
|
||||
struct in_addr src, dest;
|
||||
src.s_addr = iphdr->saddr;
|
||||
dest.s_addr = iphdr->daddr;
|
||||
|
||||
std::cout << "Source IP: " << inet_ntoa(src) << std::endl;
|
||||
std::cout << "Dest IP: " << inet_ntoa(dest) << std::endl;
|
||||
std::cout << "Protocol: " << (int)iphdr->protocol << std::endl;
|
||||
|
||||
}
|
||||
return {};
|
||||
}
|
||||
Reference in New Issue
Block a user