From d176521abe78b2c2f0d5005811ede2bf411fc0d2 Mon Sep 17 00:00:00 2001 From: PioDer Date: Wed, 11 Jan 2017 20:15:53 +0100 Subject: [PATCH] obsluga adresu sieci interfejsu WAN na NATRouter --- NATRouter.cpp | 27 ++++++++++++++++++++++++++- NATRouter.h | 2 ++ Node.cpp | 4 +--- Node.h | 1 - 4 files changed, 29 insertions(+), 5 deletions(-) diff --git a/NATRouter.cpp b/NATRouter.cpp index 822c63c..d6fcf41 100644 --- a/NATRouter.cpp +++ b/NATRouter.cpp @@ -59,7 +59,6 @@ void NATRouter::onRecv() { Packet p = this->recv(); - // TODO: jako ze router jest tez switchem, zaimplementowac wysylanie wiadomosci po sieci lokalnej if (p.getSrcPort() != 0) { // jezeli pakiet idzie z jednego wezla do drugiego w danej possieci to odeslij mu "jak switch" @@ -85,11 +84,13 @@ void NATRouter::onRecv() void NATRouter::setWanIp(string wanIp) { this->netWanConf.ip = wanIp; + this->setWanNetwork(); } void NATRouter::setWanMask(string wanMask) { this->netWanConf.mask = wanMask; + this->setWanNetwork(); } void NATRouter::setWanGatewayIp(string wanGatewayIp) @@ -107,6 +108,14 @@ string NATRouter::getWanMask() return this->netWanConf.mask; } +/* + * funkcja SNAT zapisuje w tablicy NAT + * numer portu zrodlowego komputera z LAN + * oraz jego IP i przeksztalca pakiet, zmieniajac + * zrodlowy IP na IP zewn. routera oraz wolny + * port z tablicy NAT. Jezeli portu nie ma to funkcja + * czeka, az sie zwolni + */ void NATRouter::sNAT(Packet *packet) { int port; @@ -133,6 +142,12 @@ void NATRouter::sNAT(Packet *packet) natItem = NULL; } +/* + * funkcja DNAT ma za zadanie znalezc w tablicy NAT + * port i adres IP wezla na ktory ma wrocic odpowiedz + * z sieci Internet (z zewnatrz), a takze zwolnic ten + * port + */ void NATRouter::dNAT(Packet* packet) { NATItem *natItem = &this->natTable[packet->getDstPort()]; @@ -146,6 +161,16 @@ void NATRouter::dNAT(Packet* packet) natItem = NULL; } +void NATRouter::setWanNetwork() +{ + this->netWanConf.network = this->calculateNetwork(this->getWanIp(), this->getWanMask()); +} + +string NATRouter::getWanNetwork() +{ + return this->netWanConf.network; +} + string NATRouter::getWanGatewayIp() { return this->netWanConf.gatewayIp; diff --git a/NATRouter.h b/NATRouter.h index 66be364..220af7c 100644 --- a/NATRouter.h +++ b/NATRouter.h @@ -20,6 +20,7 @@ class NATRouter : public Node int getFreePort(); void sNAT(Packet *packet); void dNAT(Packet *packet); + void setWanNetwork(); public: NATRouter(); @@ -37,6 +38,7 @@ public: // gettery string getWanIp(); string getWanMask(); + string getWanNetwork(); string getWanGatewayIp(); }; #endif /* NATROUTER_H_ */ diff --git a/Node.cpp b/Node.cpp index bbf84dc..50deb34 100644 --- a/Node.cpp +++ b/Node.cpp @@ -137,7 +137,6 @@ bool Node::connectNode(Node *node, bool firstConnected) /* * funkcja wysyla, czyli przekazuje kopie pakietu kolejnemu wezlowi - docelowemu lub bramie domyslnej * o ile jest skonfigurowana i istnieje do niej sciezka - * TODO zaimplementowac porownywanie z maska - jezeli dstIp z maska nie gra, wysylac na ruter */ bool Node::send(Packet packet, bool isRouter) { @@ -182,7 +181,6 @@ void Node::setHostname(string hostname) void Node::setIp(string ip) { this->netConf.ip = ip; - this->setNetwork(); } @@ -240,7 +238,7 @@ void Node::onRecv() void Node::setNetwork() { - this->netConf.network = this->calculateNetwork(this->netConf.ip, this->netConf.mask); + this->netConf.network = this->calculateNetwork(this->getIp(), this->getMask()); } string Node::getNetwork() diff --git a/Node.h b/Node.h index 0569f20..009b599 100644 --- a/Node.h +++ b/Node.h @@ -30,7 +30,6 @@ protected: Packet recv(); string ipToString(unsigned int ip); unsigned int stringToIp(string ip); -public: string calculateNetwork(string ip, string mask); public: