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); } } } }
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); } }
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); }
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; }
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); }
//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); } }
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)); }
/* 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); }
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(); }
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(); } }
//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>()); } }
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); }
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); }
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(); }
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; }
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; }