Browse Source

obsluga adresu sieci interfejsu WAN na NATRouter

master
Piotr Dergun 8 years ago
parent
commit
d176521abe
4 changed files with 29 additions and 5 deletions
  1. +26
    -1
      NATRouter.cpp
  2. +2
    -0
      NATRouter.h
  3. +1
    -3
      Node.cpp
  4. +0
    -1
      Node.h

+ 26
- 1
NATRouter.cpp View File

@ -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;

+ 2
- 0
NATRouter.h View File

@ -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_ */

+ 1
- 3
Node.cpp View File

@ -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()

+ 0
- 1
Node.h View File

@ -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:

Loading…
Cancel
Save