public async Task <int> AddRecordAsync(IpRecord record, CancellationToken token)
        {
            var page = await GetPageAsync(token).ConfigureAwait(false);

            page.Tail = (page.Tail + 1) % page.History.Length;
            page.History[page.Tail] = record;
            await SavePageAsync(page, token).ConfigureAwait(false);

            return(page.Tail);
        }
        private async Task FileContent_AsExpected()
        {
            var record = new IpRecord {
                CurrentIP = "127.0.0.1"
            };

            await using var stream = await _provider.CreateFileStreamAsync(record, CancellationToken.None);

            stream.Seek(0, SeekOrigin.Begin);
            using var reader = new StreamReader(stream);
            var firstLine = await reader.ReadLineAsync();

            firstLine.ShouldBe($"full address:s:{record.CurrentIP}:3389");
        }
        public async Task <IpRecord> CreateAsync(Report record, CancellationToken token)
        {
            var ipRecord = new IpRecord {
                CurrentIP   = record.CurrentIP,
                MachineName = record.MachineName,
                LastSeen    = DateTime.Now
            };
            var machineTagKey         = record.MachineTag.ToLowerInvariant();
            var machineHistoryStorage = await _historyStorageProvider.GetForMachineAsync(machineTagKey, token).ConfigureAwait(false);

            _ = await machineHistoryStorage.AddRecordAsync(ipRecord, token).ConfigureAwait(false);

            return(ipRecord);
        }
        public async Task <Stream> CreateFileStreamAsync(IpRecord record, CancellationToken token)
        {
            var sb = new StringBuilder();

            sb.AppendLine($"full address:s:{record.CurrentIP}:3389");
            sb.AppendLine("prompt for credentials:i:1");
            sb.AppendLine("administrative session:i:1");
            var content      = sb.ToString();
            var bytes        = Encoding.ASCII.GetBytes(content);
            var memoryStream = new MemoryStream();
            await memoryStream.WriteAsync(bytes, token).ConfigureAwait(false);

            return(memoryStream);
        }
Exemple #5
0
        // GET: MusicShop
        public ActionResult Index(string type, string searchString)
        {
            string   ipAddress = IpGetter.GetIPAddress();
            IpRecord record    = db.IpRecords.Where(ip => ip.IpAddress == ipAddress).SingleOrDefault();

            if (record == null)
            {
                IpRecord newRecord = new IpRecord()
                {
                    IpAddress       = ipAddress,
                    TimeOfRecord    = DateTime.UtcNow,
                    LastTimeOfIssue = DateTime.UtcNow
                };
                db.IpRecords.Add(newRecord);
                db.SaveChanges();
            }
            else
            {
                record.LastTimeOfIssue = DateTime.UtcNow;
                db.Entry(record).State = EntityState.Modified;
                db.SaveChanges();
            }

            InstrumentType insType = InstrumentType.Guitar;

            ViewBag.type = new SelectList(Enum.GetValues(typeof(InstrumentType)));

            var instruments = from ins in db.Instruments
                              select ins;

            if (!string.IsNullOrEmpty(searchString))
            {
                instruments = instruments.Where(s => (s.Manufacturer + " " + s.Model).Contains(searchString));
            }

            if (type != "All" && Enum.TryParse(type, out insType))
            {
                instruments = instruments.Where(s => s.Type == insType);
            }

            return(View(instruments));
        }
        /// <summary>
        /// 读取处理过的ip数据库
        /// </summary>
        /// <param name="ipFilePath">input文件为处理过的输入</param>
        /// <param name="specialDic"></param>
        /// <returns></returns>
        public static IpRecord[] LoadIpRecordResult(string ipFilePath)
        {
            List <IpRecord> ipRecords = new List <IpRecord>();

            using (StreamReader reader = new StreamReader(ipFilePath, Encoding.Default))
            {
                reader.ReadLine(); // 第一行是标题,不用读取

                int    id = 1;
                string lineOfText;
                while ((lineOfText = reader.ReadLine()) != null)
                {
                    var strArray = lineOfText.Split(new[] { '\t' }, StringSplitOptions.RemoveEmptyEntries);

                    var ipRecord = new IpRecord
                    {
                        Id             = id++,
                        StartIpNumber  = long.Parse(strArray[0]),
                        EndIpNumber    = long.Parse(strArray[1]),
                        StartIp        = strArray[2].Trim(),
                        EndIp          = strArray[3].Trim(),
                        Address        = strArray[4].Trim(),
                        AreaCode       = strArray[5].Trim(),
                        FoundResultStr = strArray[6].Trim()
                    };

                    if (strArray.Length == 8)
                    {
                        ipRecord.Note = strArray[7].Trim();
                    }

                    ipRecords.Add(ipRecord);
                }
            }

            return(ipRecords.ToArray());
        }
        /// <summary>
        /// 把ip段重合的记录合并为一条
        /// </summary>
        /// <param name="records"></param>
        /// <returns></returns>
        public IpRecord[] MergeIpRecord(IpRecord[] records)
        {
            if (records == null || records.Length == 0)
            {
                return(new IpRecord[0]);
            }

            if (records.Length == 1)
            {
                return(records);
            }

            List <IpRecord> result = new List <IpRecord>();

            IpRecord currVal = records[0];
            string   startIP = records[0].StartIp;
            string   endIP   = records[0].EndIp;

            for (int i = 1; i < records.Length; i++)
            {
                IpRecord nextVal = records[i];
                // 如果不可以合并 就增加该记录到结果
                bool addElement = false;

                if (string.Equals(currVal.Address, nextVal.Address, StringComparison.InvariantCultureIgnoreCase))
                {
                    if (nextVal.StartIpNumber == (endIP.IpAddressToInt() + 1))
                    {
                        // 可以合并
                        endIP = nextVal.EndIp;

                        if (i == records.Length - 1)
                        {
                            // 如果到了最后一条记录, 且可以合并
                            addElement = true;
                        }
                    }
                    else
                    {
                        addElement = true;
                    }
                }
                else
                {
                    // 不可以合并
                    addElement = true;
                }

                if (addElement)
                {
                    currVal.StartIp = startIP;
                    currVal.EndIp   = endIP;
                    result.Add(currVal);

                    currVal = nextVal;
                    startIP = nextVal.StartIp;
                    endIP   = nextVal.EndIp;
                }
            }

            return(result.ToArray());
        }