Exemplo n.º 1
0
        private List <ShodanIPInformation> ParseJsonShodan(string jsonResponse)
        {
            List <ShodanIPInformation> lstShodan = new List <ShodanIPInformation>();

            try
            {
                ShodanResponse result;
                using (MemoryStream ms = new MemoryStream(Encoding.ASCII.GetBytes(jsonResponse)))
                {
                    DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(ShodanResponse));
                    result = (ShodanResponse)serializer.ReadObject(ms);
                }

                if (result != null)
                {
                    if (result.data != null && result.data.Count > 0)
                    {
                        foreach (Datum m in result.data)
                        {
                            ShodanIPInformation shodanInfo = new ShodanIPInformation
                            {
                                Country   = result.country_name,
                                IPAddress = m.ip_str,
                                OS        = m.os,
                                HostNames = m.hostnames
                            };

                            if (!String.IsNullOrEmpty(m.data) && m._shodan.module.StartsWith("http", StringComparison.OrdinalIgnoreCase))
                            {
                                Match serverHeader = ServerHeaderExpression.Match(m.data);
                                if (serverHeader.Success)
                                {
                                    shodanInfo.ServerBanner = serverHeader.Groups["serverValue"].Value.Trim();
                                }
                            }

                            lstShodan.Add(shodanInfo);
                        }
                    }
                    else
                    {
                        ShodanIPInformation shodanInfo = new ShodanIPInformation
                        {
                            Country   = result.country_name,
                            IPAddress = result.ip_str,
                            OS        = result.os
                        };

                        shodanInfo.HostNames.AddRange(result.hostnames);

                        lstShodan.Add(shodanInfo);
                    }
                }
            }
            catch
            {
                OnSearcherLogEvent(new EventsThreads.ThreadStringEventArgs("Couldn't parse Shodan JSON response"));
            }
            return(lstShodan);
        }
Exemplo n.º 2
0
        private ShodanIPInformation GetShodanInformation(string strIPAddress, CancellationToken cancelToken)
        {
            string json = MakeShodanRequestIP(strIPAddress, cancelToken);

            if (!String.IsNullOrWhiteSpace(json))
            {
                List <ShodanIPInformation> lstSIPinfo = ParseJsonShodan(json);
                ShodanIPInformation        SIPinfo    = lstSIPinfo.FirstOrDefault(p => p.IPAddress == strIPAddress);

                return(SIPinfo);
            }
            else
            {
                return(null);
            }
        }
Exemplo n.º 3
0
        protected override int Search(IEnumerable <IPAddress> searchValues, CancellationToken cancelToken)
        {
            int resultCount = 0;

            foreach (IPAddress ip in searchValues)
            {
                ShodanIPInformation ipInfo = GetShodanInformation(ip.ToString(), cancelToken);
                if (ipInfo != null)
                {
                    resultCount++;
                    OnSearcherLinkFoundEvent(new EventsThreads.CollectionFound <ShodanIPInformation>(new[] { ipInfo }));
                }
                cancelToken.ThrowIfCancellationRequested();
            }

            return(resultCount);
        }