Symulacja NAT na przedmiot Symulacje Komputerowe
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

86 lines
2.3 KiB

/**
* @file NATRouter.h
*
* Created on: 11-01-2017
* @author Piotr Dergun
*/
#ifndef NATROUTER_H_
#define NATROUTER_H_
#include "common.h"
#include "Node.h"
#include "NATItem.h"
class NATRouter : public Node
{
/** tablica z zaalokowanymi portami na zewnątrz (indeksy to numery portów po stronie WAN) */
NATItem *natTable = NULL;
/**
* mapa do numerów portów, które wykorzystuje dana para zza NAT (IP, port)
* potrzebne do szybkiego przeszukiwania zaalokowanego portu w NAT
*/
map<string, int> natHelper;
/** konfiguracja interfejsu WAN routera */
NetConf netWanConf;
/** zachowuje ostatnio zaalokowany numer portu, aby zaalokować kolejny (o ile możliwe) */
int lastUsedPort;
/**
* inicjalizuje tablicę NAT
*/
void initalizeNatTable();
/**
* zwraca pierwszy wolny numer portu w tablicy NAT
*/
int getFreePort();
/**
* szuka aktywnego zaalokowanego portu (aktywna
* transmisja) w tablicy NAT dla pary (srcIp:srcPort)
*/
int getAllocatedPort(string srcIp, int srcPort);
/**
* zapisuje w tablicy NAT numer portu źródłowego komputera z LAN oraz jego IP
* i przekształca pakiet, zmieniając zródłowy IP na IP zewnętrzny routera
* oraz wolny port z tablicy NAT. Jeżeli portu nie ma to funkcja czeka, aż sie zwolni
* @param packet wskaźnik do przetwarzanego pakietu
*/
void sNAT(Packet *packet);
/**
* ma za zadanie znaleźć w tablicy NAT port i adres IP węzła na który ma wrócić
* odpowiedź z sieci Internet (z zewnątrz), a także przedlużyć czas życia tego portu
* @param packet wskaźnik do przetwarzanego pakietu
*/
void dNAT(Packet *packet);
/**
* przelicza adres sieci dla połączenia WAN
*/
void setWanNetwork();
public:
NATRouter();
NATRouter(string hostname);
NATRouter(string hostname, string ip, string mask);
NATRouter(string hostname, string ip, string mask, string gatewayIp);
~NATRouter();
/**
* obsługuje całą logikę routera/NAT/switcha w momencie nadejścia pakietu
*/
virtual void onRecv();
/**
* wyświetla statystyki zajętości tablicy NAT
*/
void freePorts();
/* mutuatory */
void setWanIp(string wanIp);
void setWanMask(string wanMask);
void setWanGatewayIp(string wanGatewayIp);
string getWanIp();
string getWanMask();
string getWanNetwork();
string getWanGatewayIp();
};
#define NAT_TABLE_LEN 65536
#endif /* NATROUTER_H_ */