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