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

  1. /**
  2. * @file NATRouter.h
  3. *
  4. * Created on: 11-01-2017
  5. * @author Piotr Dergun
  6. */
  7. #ifndef NATROUTER_H_
  8. #define NATROUTER_H_
  9. #include "common.h"
  10. #include "Node.h"
  11. #include "NATItem.h"
  12. class NATRouter : public Node
  13. {
  14. /** tablica z zaalokowanymi portami na zewnątrz (indeksy to numery portów po stronie WAN) */
  15. NATItem *natTable = NULL;
  16. /**
  17. * mapa do numerów portów, które wykorzystuje dana para zza NAT (IP, port)
  18. * potrzebne do szybkiego przeszukiwania zaalokowanego portu w NAT
  19. */
  20. map<string, int> natHelper;
  21. /** konfiguracja interfejsu WAN routera */
  22. NetConf netWanConf;
  23. /** zachowuje ostatnio zaalokowany numer portu, aby zaalokować kolejny (o ile możliwe) */
  24. int lastUsedPort;
  25. /**
  26. * inicjalizuje tablicę NAT
  27. */
  28. void initalizeNatTable();
  29. /**
  30. * zwraca pierwszy wolny numer portu w tablicy NAT
  31. */
  32. int getFreePort();
  33. /**
  34. * szuka aktywnego zaalokowanego portu (aktywna
  35. * transmisja) w tablicy NAT dla pary (srcIp:srcPort)
  36. */
  37. int getAllocatedPort(string srcIp, int srcPort);
  38. /**
  39. * zapisuje w tablicy NAT numer portu źródłowego komputera z LAN oraz jego IP
  40. * i przekształca pakiet, zmieniając zródłowy IP na IP zewnętrzny routera
  41. * oraz wolny port z tablicy NAT. Jeżeli portu nie ma to funkcja czeka, sie zwolni
  42. * @param packet wskaźnik do przetwarzanego pakietu
  43. */
  44. void sNAT(Packet *packet);
  45. /**
  46. * ma za zadanie znaleźć w tablicy NAT port i adres IP węzła na który ma wrócić
  47. * odpowiedź z sieci Internet (z zewnątrz), a także przedlużyć czas życia tego portu
  48. * @param packet wskaźnik do przetwarzanego pakietu
  49. */
  50. void dNAT(Packet *packet);
  51. /**
  52. * przelicza adres sieci dla połączenia WAN
  53. */
  54. void setWanNetwork();
  55. public:
  56. NATRouter();
  57. NATRouter(string hostname);
  58. NATRouter(string hostname, string ip, string mask);
  59. NATRouter(string hostname, string ip, string mask, string gatewayIp);
  60. ~NATRouter();
  61. /**
  62. * obsługuje całą logikę routera/NAT/switcha w momencie nadejścia pakietu
  63. */
  64. virtual void onRecv();
  65. /**
  66. * wyświetla statystyki zajętości tablicy NAT
  67. */
  68. void freePorts();
  69. /* mutuatory */
  70. void setWanIp(string wanIp);
  71. void setWanMask(string wanMask);
  72. void setWanGatewayIp(string wanGatewayIp);
  73. string getWanIp();
  74. string getWanMask();
  75. string getWanNetwork();
  76. string getWanGatewayIp();
  77. };
  78. #define NAT_TABLE_LEN 65536
  79. #endif /* NATROUTER_H_ */