Salesforce



using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace appJeffD.VPN
{

    public class vb
    {
        public static String left(String input, int len)
        {
            return input.Substring(0, len);
        }
        public static String right(String input, int len)
        {
            return input.Substring(input.Length - len);
        }
        public static String mid(String input, int index, int len)
        {
            return input.Substring(index - 1, len);
        }
    }

    public partial class index : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void btnParse_Click(object sender, EventArgs e)
        {
            List<String> lstPSK = new List<String>();
            List<String> lstCG = new List<String>();
            List<String> lstVPG = new List<String>();
            List<String> lstCGNet = new List<String>();
            List<String> lstVPGNet = new List<String>();
            List<String> arryVPCNets = new List<String>();
            List<String> arryRemoteNets = new List<String>();
            List<String> lstASN = new List<String>();
            
            String strServerIP = txtServerIP.Text;
            String strInterfaceName = txtInterfaceName.Text;
            

            lstPSK = fnMatchWord("Pre-Shared Key           : ", 32 + 1);
            lstCG = fnMatchWord("Customer Gateway 		        : ", 15 + 1);
            lstVPG = fnMatchWord("Virtual Private Gateway	        : ", 15 + 1);
            lstCGNet = fnMatchWord("Customer Gateway         		: ", 18 + 1);
            lstASN = fnMatchWord("Customer Gateway ASN	          : ", 6 + 1);
            lstVPGNet = fnMatchWord("Virtual Private Gateway             : ", 18 + 1);

            String strASN = lstASN[0];
            


            for (int i = 0; i < lstVPCNet.Items.Count; i++)
            {
                arryVPCNets.Add(lstVPCNet.Items[i].Text);
            }
            for (int i = 0; i < lstRemoteNet.Items.Count; i++)
            {
                arryRemoteNets.Add(lstRemoteNet.Items[i].Text);
            }

            Response.Write("<br>");
            Response.Write("sudo apt-get -y install expect-lite");
            Response.Write("<br>");
            Response.Write("jeffd=$(expect -v)");
            Response.Write("<br>");
            Response.Write("if [ \"$jeffd\" != \"\" ]; then echo found; else sudo apt-get -y install expect; fi");
            Response.Write("<br>");
            Response.Write("sudo expect -c \"spawn sudo apt-get -y install racoon; sleep 1; expect \\\"*Ok*\\\"; send \\\"\\t\\r\\\"; sleep 1; expect \\\"*irec*\\\"; send \\\"\\t\\t\\r\\\";\"");
            Response.Write("<br>");
            Response.Write("sudo sh -c 'echo " + lstVPG[0] + " " + lstPSK[0] + " >> /etc/racoon/psk.txt'");
            Response.Write("<br>");
            Response.Write("sudo sh -c 'echo " + lstVPG[1] + " " + lstPSK[1] + " >> /etc/racoon/psk.txt'");
            Response.Write("<br>");
            Response.Write("sudo chmod 600 /etc/racoon/psk.txt");
            Response.Write("<br>");
            Response.Write("sudo chmod 640 /etc/ipsec-tools.conf");
            Response.Write("<br>");


            Response.Write("sudo sh -c 'echo " + "flush\\;" + " >> /etc/ipsec-tools.conf'");
            Response.Write("<br>");
            Response.Write("sudo sh -c 'echo " + "spdflush\\;" + " >> /etc/ipsec-tools.conf'");
            Response.Write("<br>");
            Response.Write("sudo sh -c 'echo " + "spdadd " + lstCGNet[0] + " " + lstVPGNet[0] + " any -P out ipsec esp/tunnel/" + strServerIP + "-" + lstVPG[0] + "/require\\;" + " >> /etc/ipsec-tools.conf'");
            Response.Write("<br>");
            Response.Write("sudo sh -c 'echo " + "spdadd " + lstVPGNet[0] + " " + lstCGNet[0] + " any -P in ipsec esp/tunnel/" + lstVPG[0] + "-" + strServerIP + "/require\\;" + " >> /etc/ipsec-tools.conf'");
            Response.Write("<br>");
            Response.Write("sudo sh -c 'echo " + "spdadd " + lstCGNet[1] + " " + lstVPGNet[1] + " any -P out ipsec esp/tunnel/" + strServerIP + "-" + lstVPG[1] + "/require\\;" + " >> /etc/ipsec-tools.conf'");
            Response.Write("<br>");
            Response.Write("sudo sh -c 'echo " + "spdadd " + lstVPGNet[1] + " " + lstCGNet[1] + " any -P in ipsec esp/tunnel/" + lstVPG[1] + "-" + strServerIP + "/require\\;" + " >> /etc/ipsec-tools.conf'");
            Response.Write("<br>");
            for (int i = 0; i < arryVPCNets.Count(); i++)
            {
                Response.Write("sudo sh -c 'echo " + "spdadd " + lstCGNet[0] + " " + arryVPCNets[i] + " any -P out ipsec esp/tunnel/" + strServerIP + "-" + lstVPG[0] + "/require\\;" + " >> /etc/ipsec-tools.conf'");
                Response.Write("<br>");
                Response.Write("sudo sh -c 'echo " + "spdadd " + arryVPCNets[i] + " " + lstCGNet[0] + " any -P in ipsec esp/tunnel/" + lstVPG[0] + "-" + strServerIP + "/require\\;" + " >> /etc/ipsec-tools.conf'");
                Response.Write("<br>");
                Response.Write("sudo sh -c 'echo " + "spdadd " + lstCGNet[1] + " " + arryVPCNets[i] + " any -P out ipsec esp/tunnel/" + strServerIP + "-" + lstVPG[0] + "/require\\;" + " >> /etc/ipsec-tools.conf'");
                Response.Write("<br>");
                Response.Write("sudo sh -c 'echo " + "spdadd " + arryVPCNets[i] + " " + lstCGNet[1] + " any -P in ipsec esp/tunnel/" + lstVPG[0] + "-" + strServerIP + "/require\\;" + " >> /etc/ipsec-tools.conf'");
                Response.Write("<br>");
            }
            for (int i = 0; i < arryVPCNets.Count(); i++)
            {
                for (int ii = 0; ii < arryRemoteNets.Count(); ii++)
                {
                    Response.Write("sudo sh -c 'echo " + "spdadd " + arryVPCNets[i] + " " + arryRemoteNets[ii] + " any -P out ipsec esp/tunnel/" + strServerIP + "-" + lstVPG[0] + "/require\\;" + " >> /etc/ipsec-tools.conf'");
                    Response.Write("<br>");
                    Response.Write("sudo sh -c 'echo " + "spdadd " + arryRemoteNets[ii] + " " + arryVPCNets[i] + " any -P in ipsec esp/tunnel/" + lstVPG[0] + "-" + strServerIP + "/require\\;" + " >> /etc/ipsec-tools.conf'");
                    Response.Write("<br>");
                }
            }


          
            Response.Write("sudo sh -c 'echo " + "remote " + lstVPG[0] + " {" + " >> /etc/racoon/racoon.conf'");
            Response.Write("<br>");
            Response.Write("sudo sh -c 'echo " + "        exchange_mode main\\;" + " >> /etc/racoon/racoon.conf'");
            Response.Write("<br>");
            Response.Write("sudo sh -c 'echo " + "        lifetime time 28800 seconds\\;" + " >> /etc/racoon/racoon.conf'");
            Response.Write("<br>");
            Response.Write("sudo sh -c 'echo " + "        proposal {" + " >> /etc/racoon/racoon.conf'");
            Response.Write("<br>");
            Response.Write("sudo sh -c 'echo " + "                encryption_algorithm aes128\\;" + " >> /etc/racoon/racoon.conf'");
            Response.Write("<br>");
            Response.Write("sudo sh -c 'echo " + "                hash_algorithm sha1\\;" + " >> /etc/racoon/racoon.conf'");
            Response.Write("<br>");
            Response.Write("sudo sh -c 'echo " + "                authentication_method pre_shared_key\\;" + " >> /etc/racoon/racoon.conf'");
            Response.Write("<br>");
            Response.Write("sudo sh -c 'echo " + "                dh_group 2\\;" + " >> /etc/racoon/racoon.conf'");
            Response.Write("<br>");
            Response.Write("sudo sh -c 'echo " + "        }" + " >> /etc/racoon/racoon.conf'");
            Response.Write("<br>");
            Response.Write("sudo sh -c 'echo " + "        generate_policy off\\;" + " >> /etc/racoon/racoon.conf'");
            Response.Write("<br>");
            Response.Write("sudo sh -c 'echo " + "}" + " >> /etc/racoon/racoon.conf'");
            Response.Write("<br>");

            //peer 2
            Response.Write("sudo sh -c 'echo " + "remote " + lstVPG[1] + " {" + " >> /etc/racoon/racoon.conf'");
            Response.Write("<br>");
            Response.Write("sudo sh -c 'echo " + "        exchange_mode main\\;" + " >> /etc/racoon/racoon.conf'");
            Response.Write("<br>");
            Response.Write("sudo sh -c 'echo " + "        lifetime time 28800 seconds\\;" + " >> /etc/racoon/racoon.conf'");
            Response.Write("<br>");
            Response.Write("sudo sh -c 'echo " + "        proposal {" + " >> /etc/racoon/racoon.conf'");
            Response.Write("<br>");
            Response.Write("sudo sh -c 'echo " + "                encryption_algorithm aes128\\;" + " >> /etc/racoon/racoon.conf'");
            Response.Write("<br>");
            Response.Write("sudo sh -c 'echo " + "                hash_algorithm sha1\\;" + " >> /etc/racoon/racoon.conf'");
            Response.Write("<br>");
            Response.Write("sudo sh -c 'echo " + "                authentication_method pre_shared_key\\;" + " >> /etc/racoon/racoon.conf'");
            Response.Write("<br>");
            Response.Write("sudo sh -c 'echo " + "                dh_group 2\\;" + " >> /etc/racoon/racoon.conf'");
            Response.Write("<br>");
            Response.Write("sudo sh -c 'echo " + "        }" + " >> /etc/racoon/racoon.conf'");
            Response.Write("<br>");
            Response.Write("sudo sh -c 'echo " + "        generate_policy off\\;" + " >> /etc/racoon/racoon.conf'");
            Response.Write("<br>");
            Response.Write("sudo sh -c 'echo " + "}" + " >> /etc/racoon/racoon.conf'");
            Response.Write("<br>");

            //sainfo 1
            Response.Write("sudo sh -c 'echo " + "sainfo address " + lstCGNet[0] + " any address " + lstVPGNet[0] + " any {" + " >> /etc/racoon/racoon.conf'");
            Response.Write("<br>");
            Response.Write("sudo sh -c 'echo " + "    pfs_group 2\\;" + " >> /etc/racoon/racoon.conf'");
            Response.Write("<br>");
            Response.Write("sudo sh -c 'echo " + "    lifetime time 3600 seconds\\;" + " >> /etc/racoon/racoon.conf'");
            Response.Write("<br>");
            Response.Write("sudo sh -c 'echo " + "    encryption_algorithm aes128\\;" + " >> /etc/racoon/racoon.conf'");
            Response.Write("<br>");
            Response.Write("sudo sh -c 'echo " + "    authentication_algorithm hmac_sha1\\;" + " >> /etc/racoon/racoon.conf'");
            Response.Write("<br>");
            Response.Write("sudo sh -c 'echo " + "    compression_algorithm deflate\\;" + " >> /etc/racoon/racoon.conf'");
            Response.Write("<br>");
            Response.Write("sudo sh -c 'echo " + "}" + " >> /etc/racoon/racoon.conf'");
            Response.Write("<br>");

            //sainfo 2
            Response.Write("sudo sh -c 'echo " + "sainfo address " + lstCGNet[1] + " any address " + lstVPGNet[1] + " any {" + " >> /etc/racoon/racoon.conf'");
            Response.Write("<br>");
            Response.Write("sudo sh -c 'echo " + "    pfs_group 2\\;" + " >> /etc/racoon/racoon.conf'");
            Response.Write("<br>");
            Response.Write("sudo sh -c 'echo " + "    lifetime time 3600 seconds\\;" + " >> /etc/racoon/racoon.conf'");
            Response.Write("<br>");
            Response.Write("sudo sh -c 'echo " + "    encryption_algorithm aes128\\;" + " >> /etc/racoon/racoon.conf'");
            Response.Write("<br>");
            Response.Write("sudo sh -c 'echo " + "    authentication_algorithm hmac_sha1\\;" + " >> /etc/racoon/racoon.conf'");
            Response.Write("<br>");
            Response.Write("sudo sh -c 'echo " + "    compression_algorithm deflate\\;" + " >> /etc/racoon/racoon.conf'");
            Response.Write("<br>");
            Response.Write("sudo sh -c 'echo " + "}" + " >> /etc/racoon/racoon.conf'");
            Response.Write("<br>");
            Response.Write("<br>");


            //create interfaces
            Response.Write("sudo sh -c 'sed -i s/\"iface " + strInterfaceName + "\"/\"#iface " + strInterfaceName + "\"/ /etc/network/interfaces'");
            Response.Write("<br>");
            Response.Write("sudo sh -c 'echo " + "iface " + strInterfaceName + " inet manual >> /etc/network/interfaces'");
            Response.Write("<br>");
            Response.Write("sudo sh -c 'echo " + "auto " + strInterfaceName + ":0 >> /etc/network/interfaces'");
            Response.Write("<br>");
            Response.Write("sudo sh -c 'echo " + "iface " + strInterfaceName + ":0 inet static >> /etc/network/interfaces'");
            Response.Write("<br>");
            Response.Write("sudo sh -c 'echo " + "address " + vb.left(lstCGNet[0], (lstCGNet[0].ToString().Count() - 3)) + " >> /etc/network/interfaces'");
            Response.Write("<br>");
            Response.Write("sudo sh -c 'echo " + "netmask 255.255.255.252 >> /etc/network/interfaces'");
            Response.Write("<br>");
            Response.Write("sudo sh -c 'echo " + "auto " + strInterfaceName + ":1 >> /etc/network/interfaces'");
            Response.Write("<br>");
            Response.Write("sudo sh -c 'echo " + "iface " + strInterfaceName + ":1 inet static >> /etc/network/interfaces'");
            Response.Write("<br>");
            Response.Write("sudo sh -c 'echo " + "address " + vb.left(lstCGNet[1], (lstCGNet[1].ToString().Count() - 3)) + " >> /etc/network/interfaces'");
            Response.Write("<br>");
            Response.Write("sudo sh -c 'echo " + "netmask 255.255.255.252 >> /etc/network/interfaces'");
            Response.Write("<br>");

            /*
            Response.Write("sudo ip a a " + lstCGNet[0] + " dev " + strInterfaceName);
            Response.Write("<br>");
            Response.Write("sudo sh -c 'echo up ip addr add " + lstCGNet[0] + " dev " + strInterfaceName + " >> /etc/network/interfaces'");
            Response.Write("<br>");
            Response.Write("sudo ip a a " + lstCGNet[1] + " dev " + strInterfaceName);
            Response.Write("<br>");
            Response.Write("sudo sh -c 'echo up ip addr add " + lstCGNet[1] + " dev " + strInterfaceName + " >> /etc/network/interfaces'");
            Response.Write("<br>");
            */

            Response.Write("<br>");
            Response.Write("sudo service networking restart");
            Response.Write("<br>");
            Response.Write("sudo /etc/init.d/racoon start");
            Response.Write("<br>");
            Response.Write("sudo /etc/init.d/setkey start");
            Response.Write("<br>");
            Response.Write("ping -c 3 " + vb.left(lstVPGNet[0], (lstVPGNet[0].ToString().Count() - 3)) + "; ping -c 3 " + vb.left(lstVPGNet[1], (lstVPGNet[1].ToString().Count() - 3)));
            Response.Write("<br>");

            Response.Write("");
            Response.Write("<br>");
            Response.Write("");
            Response.Write("<br>");
            Response.Write("");
            Response.Write("<br>");
            Response.Write("");
            Response.Write("<br>");




            Response.Write("sudo sysctl -w net.ipv4.ip_forward=1");
            Response.Write("<br>");
            Response.Write("sudo sh -c 'echo net.ipv4.ip_forward = 1 >> /etc/sysctl.conf'");
            Response.Write("<br>");
            Response.Write("sudo apt-get -y install quagga ");
            Response.Write("<br>");
            Response.Write("sudo touch /etc/quagga/zebra.conf");
            Response.Write("<br>");
            Response.Write("sudo chown quagga.quagga /etc/quagga/zebra.conf");
            Response.Write("<br>");
            Response.Write("sudo chmod 640 /etc/quagga/zebra.conf");
            Response.Write("<br>");
            Response.Write("sudo touch /etc/quagga/bgpd.conf");
            Response.Write("<br>");
            Response.Write("sudo chown quagga.quagga /etc/quagga/bgpd.conf");
            Response.Write("<br>");
            Response.Write("sudo chmod 640 /etc/quagga/bgpd.conf");
            Response.Write("<br>");
            Response.Write("sudo sh -c 'echo hostname ubuntu >> /etc/quagga/bgpd.conf'");
            Response.Write("<br>");
            Response.Write("sudo sh -c 'echo password a >> /etc/quagga/bgpd.conf'");
            Response.Write("<br>");
            Response.Write("sudo sh -c 'echo enable password a >> /etc/quagga/bgpd.conf'");
            Response.Write("<br>");
            Response.Write("sudo sh -c 'echo ! >> /etc/quagga/bgpd.conf'");
            Response.Write("<br>");
            Response.Write("sudo sh -c 'echo log file /var/log/quagga/bgpd >> /etc/quagga/bgpd.conf'");
            Response.Write("<br>");
            Response.Write("sudo sh -c 'echo !debug bgp events >> /etc/quagga/bgpd.conf'");
            Response.Write("<br>");
            Response.Write("sudo sh -c 'echo !debug bgp zebra >> /etc/quagga/bgpd.conf'");
            Response.Write("<br>");
            Response.Write("sudo sh -c 'echo debug bgp updates >> /etc/quagga/bgpd.conf'");
            Response.Write("<br>");
            Response.Write("sudo sh -c 'echo ! >> /etc/quagga/bgpd.conf'");
            Response.Write("<br>");
            Response.Write("sudo sh -c 'echo router bgp " + strASN + " >> /etc/quagga/bgpd.conf'");
            Response.Write("<br>");
            Response.Write("sudo sh -c 'echo bgp router-id " + strServerIP + " >> /etc/quagga/bgpd.conf'");
            Response.Write("<br>");

            Response.Write("sudo sh -c 'echo network " + fnGetNetwork(lstVPGNet[0]) + " >> /etc/quagga/bgpd.conf'");
            Response.Write("<br>");
            Response.Write("sudo sh -c 'echo network " + fnGetNetwork(lstVPGNet[1]) + " >> /etc/quagga/bgpd.conf'");
            Response.Write("<br>");
            for (int i = 0; i < arryRemoteNets.Count(); i++)
            {
                Response.Write("sudo sh -c 'echo network " + arryRemoteNets[i] + " >> /etc/quagga/bgpd.conf'");
                Response.Write("<br>");
            }
            Response.Write("sudo sh -c 'echo ! >> /etc/quagga/bgpd.conf'");
            Response.Write("<br>");
            Response.Write("sudo sh -c 'echo ! aws tunnel #1 neighbour >> /etc/quagga/bgpd.conf'");
            Response.Write("<br>");
            Response.Write("sudo sh -c 'echo neighbor " + lstVPGNet[0] + " remote-as 7224 >> /etc/quagga/bgpd.conf'");
            Response.Write("<br>");
            Response.Write("sudo sh -c 'echo ! >> /etc/quagga/bgpd.conf'");
            Response.Write("<br>");
            Response.Write("sudo sh -c 'echo ! aws tunnel #2 neighbour >> /etc/quagga/bgpd.conf'");
            Response.Write("<br>");
            Response.Write("sudo sh -c 'echo neighbor " + lstVPGNet[1] + " remote-as 7224 >> /etc/quagga/bgpd.conf'");
            Response.Write("<br>");
            Response.Write("sudo sh -c 'echo ! >> /etc/quagga/bgpd.conf'");
            Response.Write("<br>");
            Response.Write("sudo sh -c 'echo line vty >> /etc/quagga/bgpd.conf'");
            Response.Write("<br>");
            Response.Write("sudo sh -c 'echo hostname ubuntu >> /etc/quagga/zebra.conf'");
            Response.Write("<br>");
            Response.Write("sudo sh -c 'echo password a >> /etc/quagga/zebra.conf'");
            Response.Write("<br>");
            Response.Write("sudo sh -c 'echo enable password a >> /etc/quagga/zebra.conf'");
            Response.Write("<br>");
            Response.Write("sudo sh -c 'echo ! >> /etc/quagga/zebra.conf'");
            Response.Write("<br>");
            Response.Write("sudo sh -c 'echo ! list interfaces >> /etc/quagga/zebra.conf'");
            Response.Write("<br>");
            Response.Write("sudo sh -c 'echo interface " + strInterfaceName + " >> /etc/quagga/zebra.conf'");
            Response.Write("<br>");
            Response.Write("sudo sh -c 'echo interface lo >> /etc/quagga/zebra.conf'");
            Response.Write("<br>");
            Response.Write("sudo sh -c 'echo ! >> /etc/quagga/zebra.conf'");
            Response.Write("<br>");
            Response.Write("sudo sh -c 'echo line vty >> /etc/quagga/zebra.conf'");
            Response.Write("<br>");
            Response.Write("sudo sh -c 'sed -i 's/bgpd=no/bgpd=yes/' /etc/quagga/daemons'");
            Response.Write("<br>");
            Response.Write("sudo sh -c 'sed -i 's/zebra=no/zebra=yes/' /etc/quagga/daemons'");
            
            Response.Write("<br>");
            Response.Write("sudo /etc/init.d/quagga start");
            Response.Write("<br>");
            Response.Write("<br>");
            Response.Write("<br>");
            Response.Write("<br>");
            Response.Write("<br>");
            Response.Write("Helpful Info");
            Response.Write("<br>");
            Response.Write("sudo racoonctl show-sa ipsec");
            Response.Write("<br>");
            Response.Write("sudo tail -f /var/log/syslog");
            Response.Write("<br>");
            Response.Write("make sure to enable route propogation in VPC");
            Response.Write("<br>");
            Response.Write("double check UFW firewall on linux server, not sure if this is needed.");
            Response.Write("<br>");
            Response.Write("<br>");
            Response.Write("<br>");

            Response.Write("Virtual Private Gateway 1: ");
            Response.Write(lstVPG[0]);
            Response.Write("<br>");
            Response.Write("Virtual Private Gateway 2: ");
            Response.Write(lstVPG[1]);
            Response.Write("<br>");
            Response.Write("Customer Gateway 1: ");
            Response.Write(lstCG[0]);
            Response.Write("<br>");
            Response.Write("Customer Gateway 2: ");
            Response.Write(lstCG[1]);
            Response.Write("<br>");

            Response.Write("Tunnel Interface Client Side 1: ");
            Response.Write(lstCGNet[0]);
            Response.Write("<br>");
            Response.Write("Tunnel Interface Client Side 2: ");
            Response.Write(lstCGNet[1]);
            Response.Write("<br>");
            Response.Write("Tunnel Interface AWS Side 1: ");
            Response.Write(lstVPGNet[0]);
            Response.Write("<br>");
            Response.Write("Tunnel Interface AWS Side 2: ");
            Response.Write(lstVPGNet[1]);
            Response.Write("<br>");
            Response.Write("<br>");
        }

        List<string> fnMatchWord(string strMatchWord, int intMaxLength)
        {
            List<string> strResults = new List<string>();
            string strWhiteSpace = "";
            string strAdd = "";
            for (int i = 1; i < txtConfig.Text.Count() - (strMatchWord.Count() + 1); i++)
            {
                if (vb.mid(txtConfig.Text, i, strMatchWord.Count()) == strMatchWord)
                {
                    for (int ii = 0; ii < intMaxLength; ii++)
                    {
                        strWhiteSpace = vb.mid(txtConfig.Text, i + ii + strMatchWord.Count(), 1);
                        if (strWhiteSpace == "\r")
                        {
                            strAdd = vb.mid(txtConfig.Text, i + strMatchWord.Count(), ii);
                            strResults.Add(strAdd);
                            strWhiteSpace = "";
                            strAdd = "";
                            ii = intMaxLength;
                        }
                    }

                }

            }
            return strResults;
        }

        String fnGetNetwork(string strNetwork)
        {
            String strIP = vb.left(strNetwork, (strNetwork.Count() - 3));
            String strInt = vb.right(strIP, 1);
            String strNewString = vb.left(strIP, strIP.Count() - 1);
            Int32 intIP = Convert.ToInt32(strInt);
            if (intIP == 0)
            {
                intIP = 9;
            }
            else
            {
                intIP = intIP - 1;
            }

            strNewString = strNewString + intIP + "/30";
            return strNewString;
        }

        protected void lbAddVPCNet_Click(object sender, EventArgs e)
        {
            lstVPCNet.Items.Add(txtVPCNet.Text);
            txtVPCNet.Text = "";
        }

        protected void lbAddRemoteNet_Click(object sender, EventArgs e)
        {
            lstRemoteNet.Items.Add(txtRemoteNet.Text);
            txtRemoteNet.Text = "";
        }
    }
}



using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace FileBackup
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        void fnGetPaths(string[] args)
        {
            foreach (string path in args)
            {
                if (File.Exists(path))
                {
                    // This path is a file
                    ProcessFile(path);
                }
                else if (Directory.Exists(path))
                {
                    // This path is a directory
                    ProcessDirectory(path);
                }
                else
                {
                    Console.WriteLine("{0} is not a valid file or directory.", path);
                }
            }
        }

        // Process all files in the directory passed in, recurse on any directories 
        // that are found, and process the files they contain.
       void ProcessDirectory(string targetDirectory)
        {
            // Process the list of files found in the directory.
            string[] fileEntries = Directory.GetFiles(targetDirectory);
            foreach (string fileName in fileEntries)
                ProcessFile(fileName);

            // Recurse into subdirectories of this directory.
            string[] subdirectoryEntries = Directory.GetDirectories(targetDirectory);
            foreach (string subdirectory in subdirectoryEntries)
                ProcessDirectory(subdirectory);
        }

        // Insert logic for processing found files here.
        void ProcessFile(string path)
        {
            //Console.WriteLine("Processed file '{0}'.", path);
            lstFiles.Items.Add(path);
        }

        private void btnTest_Click(object sender, EventArgs e)
        {

            var test = new List();
            var args = new string[1];
            args[0] = "C:\\Users\\jeffdm\\WorkDocs\\";
            fnGetPaths(args);

        }

        void fnOld()
        {


            //was thinking a replicate and encrypt... probably needs to be built in the future or on my home machine / storage gateway
            //need a workdocs like solution for home
            //search and index lambda functions
            //tiny increments? / api gateway?
            //so revisiting this, i think this still has value, i want to replicate content between my old workdocs folder and the workdocs drive folder
            /*
            try
            {
                File.Copy("source", "destination");
            }
            catch (IOException iox)
            {
                Console.WriteLine(iox.Message);
            }
            */
            /*
            if (!File.Exists(""))
            {
                // This statement ensures that the file is created,  
                // but the handle is not kept.  
                //using (FileStream fs = File.Create(path)) { }
            }
            */

            /*
            string[] dirEntries = Directory.GetDirectories("C:\\Users\\jeffdm\\WorkDocs\\");
            foreach (string dirName in dirEntries)
            {
                string[] dirEntries2 = Directory.GetDirectories("C:\\Users\\jeffdm\\WorkDocs\\");
                foreach (string dirName2 in dirEntries2)
                {

                }
            }*/
            //var args = new string[]();
            /*
string[] dirEntries = Directory.GetDirectories("C:\\Users\\jeffdm\\WorkDocs\\");
foreach (string dirName in dirEntries)
{
    //lstFiles.Items.Add(dirName);
    //need to loop and run getdirectors on every directory....
    string[] fileEntries = Directory.GetFiles(dirName);
    foreach (string fileName in fileEntries)
    {
        //Console.Write(fileName);
        lstFiles.Items.Add(fileName);
    }
}
*/

            //Console.Write("Test");
            //MessageBox.Show("frank");
            //MessageBox.Show(fileEntries[1]);
        }

        public class vb
        {
            public static String left(String input, int len)
            {
                return input.Substring(0, len);
            }
            public static String right(String input, int len)
            {
                return input.Substring(input.Length - len);
            }
            public static String mid(String input, int index, int len)
            {
                return input.Substring(index - 1, len);
            }
        }
        private void btnSync_Click(object sender, EventArgs e)
        {
            int i = 0;
            foreach (var item in lstFiles.Items)
            {
                //MessageBox.Show(vb.right(item.ToString(), (item.ToString().Length - 1)));
                string destination = "W" + vb.right(item.ToString(), (item.ToString().Length - 1));
                MessageBox.Show(item.ToString() + " to: " + destination);
                
                try
                {
                    File.Copy(item.ToString(), destination);
                }
                catch (IOException iox)
                {
                    Console.WriteLine(iox.Message);
                }
                
                
                i++;
                if (i > 2)
                {
                    break;
                }
            }
        }
    }
}