Exemple #1
0
        public void AddKnownHost(KnownHost kh)
        {
            if (OpenCon())
            {
                if (KnownHostDupeCheck(kh.GUID))
                {
                    this.UpdateHost(kh);
                }
                else
                {
                    SqlCommand comm = new SqlCommand("INSERT INTO dbo.Hosts (MAC, IP, Version, DateAdded, GUID, Hostname) Values (@m, @i, @v, @da, @g, @h)", cnn);

                    comm.Parameters.AddWithValue("m", kh.hostMAC);
                    comm.Parameters.AddWithValue("i", kh.hostIP.Trim());
                    comm.Parameters.AddWithValue("v", kh.version.Trim());
                    comm.Parameters.AddWithValue("da", kh.dateAdded);
                    comm.Parameters.AddWithValue("g", kh.GUID.Trim());
                    comm.Parameters.AddWithValue("h", kh.hostname);

                    try
                    {
                        comm.ExecuteNonQuery();
                    }
                    catch (Exception e)
                    {
                        Console.WriteLine(e.Source);
                        Console.WriteLine(e.Message);
                        Console.WriteLine(e.StackTrace);
                    }
                }
            }
        }
Exemple #2
0
        public bool CheckKnownHostDupe(KnownHost kh)
        {
            if (!OpenCon())
            {
                return(true);
            }
            String       q1          = "SELECT * FROM dbo.Hosts Where GUID = @guid";
            SqlParameter serialParam = new SqlParameter("guid", SqlDbType.VarChar);

            serialParam.Value = kh.GUID;

            SqlCommand comm = new SqlCommand(q1, cnn);

            comm.Parameters.Add(serialParam);

            using (var results = comm.ExecuteReader())
            {
                while (results.Read())
                {
                    if (results["guid"].ToString().Equals(kh.GUID))
                    {
                        cnn.Close();
                        return(true);
                    }
                }
                return(false);
            }
        }
Exemple #3
0
        private void rescan()
        {
            knownHosts.Clear();
            listView1.Items.Clear();
            System.Console.Write("Hello, World!\n");
            if (KnownHost.rkeySshHostKeys == null)
            {
                MessageBox.Show("Could not locate registry key HKEY_CURRENT_USER\\Software\\SimonTatham\\PuTTY\\SshHostKeys. Are you sure you have installed PuTTY?");
                return;
            }
            string[] subkeys = KnownHost.rkeySshHostKeys.GetValueNames();
            if (subkeys.Length == 0)
            {
                System.Console.Write("No SshHostKeys key found in registry\n");
                return;
            }
            System.Console.Write("found {0} subkeys\n", subkeys.Length);
            var malformedKeys = new String[0];

            foreach (var subkey in subkeys)
            {
                var knownHost = KnownHost.fromReg(subkey);
                knownHosts.Add(knownHost);
                listView1.Items.Add(knownHost.listViewItem);
            }

            updateKnownHostStats();
        }
        public bool IsMatch(KnownHost knownHost, string hostmask)
        {
            Contract.Requires<ArgumentNullException>(knownHost != null, "knownHost");
            Contract.Requires<ArgumentNullException>(hostmask != null, "hostmask");

            return knownHost.Equals(hostmask);
        }
Exemple #5
0
    void ListenForOtherHosts(UDPListener listener)
    {
        string [] msgParts = listener.lastReceivedUDPPacket.Split('\t');
        IPAddress senderIP = null;

        try
        {
            senderIP = IPAddress.Parse(msgParts[0].ToString());
        }
        catch
        {
        }
        if (senderIP != null && !InterfacesManager.hostIps.Contains(senderIP))
        {
            if (!_knownHosts.ContainsKey(msgParts[0]))
            {
                _knownHosts[msgParts[0]] = new KnownHost(msgParts[0], msgParts[2]);                //"");
            }
            else
            {
                _knownHosts[msgParts[0]].ResetAliveCount();
            }
            Debug.Log("Got message from " + msgParts[0]);
        }
        lastpacket = listener.lastReceivedUDPPacket;
    }
Exemple #6
0
    public static KnownHost fromReg(String name)
    {
        var rval = new KnownHost();

        rval.source = FROM_REGISTRY;
        var match = regKeyNameRegex.Match(name);

        if (!match.Success)
        {
            rval.parseError = true;
            return(rval);
        }
        rval.keyType = match.Groups[1].Value;
        rval.port    = int.Parse(match.Groups[2].Value);
        rval.host    = match.Groups[3].Value;

        rval.windowsRegistryName  = name;
        rval.windowsRegistryValue = (String)rkeySshHostKeys.GetValue(name);

        var decodedParts = DecodePuttyRegPubKey(rval.windowsRegistryValue);

        rval.exponentBytes = decodedParts.Item1;
        rval.modulusBytes  = decodedParts.Item2;

        // NOTE pubKeyFormatted is analogous to opensshBase64KeyStr
        var pubKeyFormatted = makeKeyFingerprint("ssh-rsa", rval.exponentBytes, rval.modulusBytes);

        using (MD5 md5Hash = MD5.Create())
        {
            rval.keyHash = GetMd5Hash(md5Hash, pubKeyFormatted);
        }

        return(rval);
    }
Exemple #7
0
        //Known Host Methods
        public List <KnownHost> GetKnownHosts()
        {
            List <KnownHost> khs = new List <KnownHost>();
            SqlCommand       cmd = new SqlCommand();
            SqlDataReader    reader;

            cmd.CommandText = "SELECT * FROM dbo.Hosts ORDER BY DateAdded desc";
            cmd.CommandType = CommandType.Text;
            cmd.Connection  = cnn;

            if (!OpenCon())
            {
                return(new List <KnownHost>());
            }
            using (reader = cmd.ExecuteReader())
            {
                while (reader.Read())
                {
                    KnownHost kh = new KnownHost(
                        reader["MAC"].ToString(),
                        reader["IP"].ToString(),
                        reader["Version"].ToString(),
                        (DateTime)reader["DateAdded"],
                        reader["GUID"].ToString(),
                        reader["Hostname"].ToString()
                        );
                    khs.Add(kh);
                }
                return(khs);
            }
        }
Exemple #8
0
        public static void SendKnownHost(KnownHost kh)
        {
            //Send 1 Debug message
            IMClient im = new IMClient();

            im.setConnParams(ServiceConnectionDelegator.GetService().IPAddress, 25567);
            im.SetupConn();
            Console.WriteLine(DoSerialize(kh));
            im.SendSignal(IMClient.IM_NewIdentity, DoSerialize(kh));
        }
Exemple #9
0
    /* TODO remove? */
    public static KnownHost fromParts(String host, int port, String keyType, string keyData)
    {
        var rval = new KnownHost();

        rval.host    = host;
        rval.port    = port;
        rval.keyType = keyType;
        rval.windowsRegistryValue = keyData;
        return(rval);
    }
Exemple #10
0
        public void AddKnownHost(KnownHost kh)
        {
            String     q    = "INSERT INTO dbo.Hosts (MAC, IP, Version, DateAdded, GUID) Values (@m, @i, @v, @da, @g, @h)";
            SqlCommand comm = new SqlCommand(q, cnn);

            comm.Parameters.AddWithValue("m", kh.hostMAC);
            comm.Parameters.AddWithValue("i", kh.hostIP);
            comm.Parameters.AddWithValue("v", kh.version);
            comm.Parameters.AddWithValue("da", kh.dateAdded);
            comm.Parameters.AddWithValue("g", kh.GUID);
            comm.Parameters.AddWithValue("h", kh.hostname);

            comm.ExecuteNonQuery();
        }
Exemple #11
0
        public void UpdateHost(KnownHost kh)
        {
            if (OpenCon())
            {
                String     q    = "Update dbo.hosts set MAC = @mac, IP = @ip, version = @version, DateAdded=@dateadded, Hostname= @hostname Where Guid = @guid";
                SqlCommand comm = new SqlCommand(q, cnn);

                comm.Parameters.AddWithValue("mac", kh.hostMAC);
                comm.Parameters.AddWithValue("ip", kh.hostIP.Trim());
                comm.Parameters.AddWithValue("version", kh.version.Trim());
                comm.Parameters.AddWithValue("dateadded", kh.dateAdded);
                comm.Parameters.AddWithValue("guid", kh.GUID.Trim());
                comm.Parameters.AddWithValue("hostname", kh.hostname);

                comm.ExecuteNonQuery();
            }
        }
Exemple #12
0
        //Known Host Methods
        public List <KnownHost> GetKnownHosts()
        {
            try
            {
                List <KnownHost> khs = new List <KnownHost>();
                SqlCommand       cmd = new SqlCommand();
                SqlDataReader    reader;

                cmd.CommandText = "SELECT * FROM dbo.Hosts ORDER BY DateAdded desc";
                cmd.CommandType = CommandType.Text;
                cmd.Connection  = cnn;

                if (!OpenCon())
                {
                    return(new List <KnownHost>());
                }
                using (reader = cmd.ExecuteReader())
                {
                    while (reader.Read())
                    {
                        KnownHost kh = new KnownHost(
                            reader["MAC"].ToString(),
                            reader["IP"].ToString(),
                            reader["Version"].ToString(),
                            (DateTime)reader["DateAdded"],
                            reader["GUID"].ToString(),
                            reader["Hostname"].ToString()
                            );
                        khs.Add(kh);
                    }

                    CloseCon();
                    return(khs);
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
                Console.WriteLine(e.Source);
                Console.WriteLine(e.StackTrace);
                return(new List <KnownHost>());
            }
        }
Exemple #13
0
        private bool AuthTable()
        {
            List <ServicesObject> svos = new List <ServicesObject>();

            for (int i = 0; i < svrs.Count; i++)
            {
                DataGridRow dataGridRow = (DataGridRow)ServicesTable.ItemContainerGenerator.ContainerFromIndex(i);
                SVTableRow  sv          = (SVTableRow)dataGridRow.Item;

                if (sv.IPAddress.Trim().Length != 0)
                {
                    svos.Add(new ServicesObject(sv.IPAddress, sv.Port, sv.Preference));
                }
            }

            svos = svos.OrderBy(x => x.Preference).ToList();
            ServicesTable.ItemsSource = new List <SVTableRow>();
            clean = new List <ServicesObject>();

            int a = 1;

            this.svrs = new List <SVTableRow>();

            foreach (ServicesObject svo in svos)
            {
                String ip = KnownHost.ParseAsIP(svo.IPAddress);
                if (!ip.Equals("") && svo.port < 65536 && svo.port > 0)
                {
                    clean.Add(new ServicesObject(svo.IPAddress, svo.port, a));
                    svrs.Add(new SVTableRow {
                        IPAddress = svo.IPAddress, Port = svo.port, Preference = a
                    });

                    ServicesTable.ItemsSource = svrs;
                    ServicesTable.Items.Refresh();

                    a++;
                }
            }

            return(true);
        }
Exemple #14
0
        public static KnownHost[] GetHosts()
        {
            if (!File.Exists(etcHosts))
            {
                return(new KnownHost[0]);
            }
            var result = File.ReadAllLines(etcHosts).Where(_ => !string.IsNullOrEmpty(_) && !_.Contains(comment)).ToArray();
            var hosts  = new KnownHost[result.Length];

            for (var i = 0; i < result.Length; i++)
            {
                var currentLineData = result[i].Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
                hosts[i] = new KnownHost()
                {
                    IpAddr      = currentLineData[0],
                    CommonNames = currentLineData.Skip(1).ToArray()
                };
            }
            return(hosts);
        }
Exemple #15
0
        private void readOpenSshKnownHostsFile(string filename)
        {
            var    file = new StreamReader(filename);
            string line;
            int    lineNumber   = 0;
            bool   ignoreErrors = false;

            while ((line = file.ReadLine()) != null)
            {
                lineNumber++;
                try
                {
                    var knownHost = KnownHost.fromOpenSshKnownHosts(line);
                    knownHosts.Add(knownHost);
                    listView1.Items.Add(knownHost.listViewItem);
                    // TODO clean up in case of exception!
                }
                catch (Exception e)
                {
                    if (ignoreErrors)
                    {
                        continue;
                    }
                    //var msg = new StringBuilder();
                    //msg.AppendFormat("An error was encountered processing line {0}: {1}");
                    var dialog = new Form2(e.ToString(), lineNumber, line);
                    dialog.StartPosition = FormStartPosition.CenterParent;
                    var keepGoing = dialog.ShowDialog() == DialogResult.Yes;
                    ignoreErrors = dialog.ignoreFutureErrors;
                    if (!keepGoing)
                    {
                        break;
                    }
                }
            }
            updateKnownHostStats();
        }
Exemple #16
0
        private void LoadTable()
        {
            MSSQL            ms  = new MSSQL();
            List <KnownHost> khs = ms.GetKnownHosts();
            List <String>    ips = ms.GetIPs();

            khrs = new List <KHTableRow>();

            List <GUIDMACVersionIP> gmvis = GetActiveHosts();

            foreach (KnownHost kh in khs)
            {
                bool found = false;
                foreach (GUIDMACVersionIP gmvi in gmvis)
                {
                    if (kh.GUID.Trim().Equals(gmvi.GUID.Trim()))
                    {
                        khrs.Add(new KHTableRow {
                            GUID = kh.GUID, DateAdded = kh.dateAdded.ToString(), IP = gmvi.IP, MAC = gmvi.MAC, Status = KnownHost.ByteToString(KnownHost.STATE_ONLINE), Version = gmvi.Version, Hostname = gmvi.Hostname
                        });
                        found = true;
                        break;
                    }
                }
                if (!found)
                {
                    khrs.Add(new KHTableRow {
                        GUID = kh.GUID, DateAdded = kh.dateAdded.ToString(), IP = kh.hostIP, MAC = kh.hostMAC, Status = KnownHost.ByteToString(kh.status), Version = kh.version, Hostname = kh.hostname
                    });
                }
            }
            KnownHostTable.ItemsSource = khrs;
            KnownHostTable.Items.Refresh();
            ms.CloseCon();

            LastUpdated.Content = DateTime.Now;
        }
Exemple #17
0
    public static KnownHost fromOpenSshKnownHosts(string line)
    {
        /* for details on openssh known_hosts format, see:
         * http://man.openbsd.org/sshd.8#SSH_KNOWN_HOSTS_FILE_FORMAT
         */
        var rval = new KnownHost();

        rval.opensshLine = line;
        var    pieces = line.Split(' ').Where(s => s.Length > 0).ToArray();
        string marker = null, hostnames, comment = null;
        string b64KeyFingerprint;

        switch (pieces.Length)
        {
        case 3:
            hostnames         = pieces[0];
            rval.keyType      = pieces[1];
            b64KeyFingerprint = pieces[2];
            break;

        case 4:
            if (pieces[0][0] == '@')
            {
                marker            = pieces[0];
                hostnames         = pieces[1];
                rval.keyType      = pieces[2];
                b64KeyFingerprint = pieces[3];
            }
            else
            {
                hostnames         = pieces[0];
                rval.keyType      = pieces[1];
                b64KeyFingerprint = pieces[2];
                comment           = pieces[3];
            }
            break;

        case 5:
            marker            = pieces[0];
            hostnames         = pieces[1];
            rval.keyType      = pieces[2];
            b64KeyFingerprint = pieces[3];
            comment           = pieces[4];
            break;

        default:
            throw new Exception("invalid openssh-format known_hosts line: wrong number of space-separated fields");
        }
        if (marker != null && marker[0] != '@')
        {
            throw new Exception("invalid openssh-format known_hosts line: markers must begin with '@'");
        }

        /* "hostnames" is probably hashed */
        if (hostnames[0] == '|')
        {
            var hostHashPieces = hostnames.Split('|');
            if (hostHashPieces.Length != 4)
            {
                throw new Exception(@"found ""|"" but not the right number");
            }
            rval.hostHashSalt = Convert.FromBase64String(hostHashPieces[2]);
            rval.hostHash     = Convert.FromBase64String(hostHashPieces[3]);
        }
        else
        {
            rval.host = hostnames;
        }

        /* Extract public key */
        var decodedKeyParts = DecodeOpenSSHPubKey(b64KeyFingerprint);

        rval.exponentBytes = decodedKeyParts.Item1;
        rval.modulusBytes  = decodedKeyParts.Item2;

        /* Calculate checksum hash */
        /* TODO this is a little more work than it has to be */
        var pubKeyFormatted = makeKeyFingerprint("ssh-rsa", rval.exponentBytes, rval.modulusBytes);

        using (MD5 md5Hash = MD5.Create())
        {
            rval.keyHash = GetMd5Hash(md5Hash, pubKeyFormatted);
        }

        return(rval);
    }
 void ListenForOtherHosts(UDPListener listener)
 {
     string [] msgParts = listener.lastReceivedUDPPacket.Split('\t');
     IPAddress senderIP = null;
     try
     {
          senderIP = IPAddress.Parse(msgParts[0].ToString());
     }
     catch
     {
     }
     if(senderIP != null && !InterfacesManager.hostIps.Contains(senderIP))
     {
         if(!_knownHosts.ContainsKey(msgParts[0]))
         {
             _knownHosts[msgParts[0]] = new KnownHost(msgParts[0], msgParts[2]);//"");
         }
         else
         {
             _knownHosts[msgParts[0]].ResetAliveCount();
         }
         Debug.Log ("Got message from " +msgParts[0]);
     }
     lastpacket = listener.lastReceivedUDPPacket;
 }