Advertisement
Phr0zen_Penguin

subnetCalculator.cpp - Subnet Calculator Example

Mar 12th, 2016
149
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.85 KB | None | 0 0
  1. /**
  2.  * [subnetCalculator.cpp]
  3.  *
  4.  * Subnet Calculator example.
  5.  *
  6.  * by Rocco Castoro.
  7.  */
  8. #include "subnetCalculator.hpp"
  9.  
  10. /**
  11.  * The main() function:
  12.  */
  13. int main(void)
  14. {
  15.     /**
  16.      * Give details, given an IP and Subnet Mask:
  17.      */
  18.     char        resp = 'y';
  19.  
  20.         while(resp == 'y')
  21.         {
  22.             cout << " //// -- IPv4 Subnetting Calculator -- \\\\\\\\" << endl;
  23.             cout << "||||  ----- dev. by Rocco Castoro ----- ||||" << endl;
  24.             cout << " \\\\\\\\ ----- rockycast@hotmail.com ----- ////" << endl;
  25.             cout << endl << endl;
  26.  
  27.  
  28.             /**
  29.              * Get IP address octets:
  30.              */
  31.             string      ip;
  32.             vector<int> octetsIP;
  33.  
  34.                 while(getOctetsIP(ip, octetsIP) == 1)
  35.                 {
  36.                     cout << "Enter IPv4 address -> ";
  37.  
  38.                     (getline(cin, ip));                     // Accept user input for IP address.
  39.                 }
  40.  
  41.  
  42.             /**
  43.              * Get subnet mask octets:
  44.              */
  45.             string      mask;
  46.             vector<int> octetsMask;
  47.  
  48.                 while(getOctetsMask(mask, octetsMask) == 1)
  49.                 {
  50.                     cout << "Enter subnet mask for " << ip << " -> ";
  51.  
  52.                     (getline(cin, mask));                   // Accept user input for subnet mask.
  53.                 }
  54.  
  55.             cout << endl << endl << endl << endl << endl;
  56.  
  57.  
  58.             /**
  59.              * Print Initial User IP and Subnet Mask:
  60.              */
  61.             vector<int> decimals;
  62.  
  63.             cout << "//////////////////////////////////////////" << endl;
  64.             cout << "/// IP Address: " << toString(octetsIP) << endl;
  65.  
  66.             vector<int> decimalMask = toDecimal(octetsMask, decimals);
  67.  
  68.             cout << "/// Subnet Mask: " << toString(octetsMask) << endl;
  69.             cout << "//////////////////////////////////////////" << endl << endl;
  70.  
  71.  
  72.             /**
  73.              * Print Binary Representation:
  74.              */
  75.             vector<int> octetsIPBits;
  76.             vector<int> octetsMaskBits;
  77.  
  78.             getNHBits(octetsIP, octetsMask, octetsIPBits, octetsMaskBits);
  79.  
  80.             vector<int> netID = getNetID(octetsIP, octetsMask);
  81.             vector<int> decimalNetID = toDecimal(netID, decimals);
  82.  
  83.             int         netInc = getIncrement(decimalMask, decimalNetID);
  84.  
  85.             cout << endl;
  86.  
  87.  
  88.             /**
  89.              * Print IP Class:
  90.              *
  91.              * Run function to determine and print IP class.
  92.              */
  93.             cout << "------------------------------------------" << endl;
  94.             cout << "//////////// Class Information ///////////" << endl;
  95.             cout << "------------------------------------------" << endl;
  96.  
  97.             int         classResult = calcClass(octetsIP);
  98.             int         ipClass = 0;
  99.  
  100.                 switch(classResult)
  101.                 {
  102.                     case 1:
  103.                         cout << "IP Class: Private block, Class 'A' " << endl;
  104.  
  105.                         ipClass = 1;
  106.                         break;
  107.                     case 2:
  108.                         cout << "IP Class: Private block, Class 'B' " << endl;
  109.  
  110.                         ipClass = 2;
  111.                         break;
  112.                     case 3:
  113.                         cout << "IP Class: Private block, Class 'C' " << endl;
  114.  
  115.                         ipClass = 3;
  116.                         break;
  117.                     case 4:
  118.                         cout << "IP Class: Reserved block, System Loopback Address" << endl;
  119.  
  120.                         ipClass = 1;
  121.                         break;
  122.                     case 5:
  123.                         cout << "IP Class: A" << endl;
  124.  
  125.                         ipClass = 1;
  126.                         break;
  127.                     case 6:
  128.                         cout << "IP Class: B" << endl;
  129.  
  130.                         ipClass = 2;
  131.                         break;
  132.                     case 7:
  133.                         cout << "IP Class: C" << endl;
  134.  
  135.                         ipClass = 3;
  136.                         break;
  137.                     case 8:
  138.                         cout << "IP Class: D" << endl;
  139.  
  140.                         ipClass = 4;
  141.  
  142.                         cout << "!! This is a reserved Class D Multicast IP Address Block" << endl;
  143.                         break;
  144.                     case 9:
  145.                         cout << "IP Class: E" << endl;
  146.  
  147.                         ipClass = 5;
  148.  
  149.                         cout << "!! This is a reserved Class E Multicast IP Address Block" << endl;
  150.                         break;
  151.                     default:
  152.                         cout << "Not in Range" << endl;
  153.                         break;
  154.                 }
  155.  
  156.             vector<int> subClassMask;
  157.  
  158.             getSubnets(decimalMask, ipClass, subClassMask);
  159.  
  160.             cout << "Default Class Subnet Mask: " << toString(subClassMask) << endl;
  161.             cout << "------------------------------------------" << endl << endl;
  162.  
  163.  
  164.             /**
  165.              * Print Subnetting Details:
  166.              */
  167.             cout << "------------------------------------------" << endl;
  168.             cout << "///////////// Subnet Details /////////////" << endl;
  169.             cout << "------------------------------------------" << endl;
  170.  
  171.             vector<int> netIDRange = getNetIDRange(decimalNetID, netInc, decimalMask);
  172.  
  173.             cout << "Network ID:            -           Broadcast ID: " << endl;
  174.             cout << "------------------------------------------" << endl;
  175.             cout << toString(netID) << " - [ usable hosts ] - ";
  176.             cout << toString(netIDRange) << endl << endl;
  177.             cout << "Network Increment: " << getIncrement(decimalMask, decimalNetID) << endl;
  178.             cout << "Number of Subnets: " << getSubnets(decimalMask, ipClass, subClassMask) << endl;
  179.             cout << "Usable hosts per subnet: " << getHostsPerSubnet(decimalMask) << endl;
  180.             cout << "------------------------------------------" << endl << endl;
  181.  
  182.             cout << "Would you like to enter another IP Address to subnet? (y or n): ";
  183.             cin >> resp;
  184.             cout << endl << endl << endl << endl;
  185.         }
  186.  
  187.     return 0;
  188. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement