예제 #1
0
        private void DebugPrepareUDPTest()
        {
            var ipaddress = IPAddress.Parse("80.83.66.2");
            var addrbytes = ipaddress.GetAddressBytes().Reverse().ToArray();
            var addr      = new Models.Int128();

            if (addrbytes.Length == 4)
            {
                addr.Hi  = 0;
                addr.Low = BitConverter.ToUInt32(addrbytes, 0);
            }

            var addresstext = new BigMath.Int128(addr.Hi, addr.Low).ToString();
            var addbytes2   = ASCIIEncoding.ASCII.GetBytes(addresstext);

            var item = new Models.CacheIPRange()
            {
                Created      = DateTime.UtcNow,
                Identity     = "identity1",
                Proto_IpFrom = addbytes2,
                Proto_IpTo   = addbytes2,
                PolicyId     = 0
            };

            CacheLiveStorage.UdpCache = new System.Collections.Concurrent.ConcurrentDictionary <string, Models.CacheIPRange>();
            CacheLiveStorage.UdpCache.AddOrUpdate("stationid1", item, (key, oldValue) => item);
        }
예제 #2
0
        private static void ProcessResult(byte[] receivedResult)
        {
            try
            {
                var receivedPacket = new FP.Radius.RadiusPacket(receivedResult);
                if (receivedPacket.Valid)
                {
                    var ipaddress       = receivedPacket.Attributes.Where(t => t.Type == FP.Radius.RadiusAttributeType.FRAMED_IP_ADDRESS).First().Value;
                    var calledstationid = ASCIIEncoding.ASCII.GetString(receivedPacket.Attributes.Where(t => t.Type == FP.Radius.RadiusAttributeType.CALLED_STATION_ID).First().Data);

                    var addrbytes = IPAddress.Parse(ipaddress).GetAddressBytes();
                    var addr      = new Models.Int128();
                    if (addrbytes.Length == 4)
                    {
                        addr.Hi  = 0;
                        addr.Low = BitConverter.ToUInt32(addrbytes, 0);
                    }
                    else if (addrbytes.Length == 16)
                    {
                        addr.Hi  = BitConverter.ToUInt64(addrbytes, 0);
                        addr.Low = BitConverter.ToUInt64(addrbytes, 8);
                    }

                    var addresstext = new BigMath.Int128(addr.Hi, addr.Low).ToString();
                    var addbytes2   = ASCIIEncoding.ASCII.GetBytes(addresstext);

                    var policyid = 0;
                    if (CacheLiveStorage.CoreCache.CustomLists != null)
                    {
                        var matchingCustomList = CacheLiveStorage.CoreCache.CustomLists.Where(t => string.Compare(t.Identity, calledstationid, StringComparison.OrdinalIgnoreCase) == 0).FirstOrDefault();
                        policyid = (matchingCustomList == null)
                            ? 0
                            : matchingCustomList.PolicyId;
                    }

                    var item = new Models.CacheIPRange()
                    {
                        Created      = DateTime.UtcNow,
                        Identity     = calledstationid,
                        Proto_IpFrom = addbytes2,
                        Proto_IpTo   = addbytes2,
                        PolicyId     = policyid
                    };

                    CacheLiveStorage.UdpCache.AddOrUpdate(calledstationid, item, (key, oldValue) => item);

                    log.Info($"Processed {ipaddress} for {calledstationid}.");
                }
                else
                {
                    log.Info("Unable to process UDP packet.");
                }
            }
            catch (Exception ex)
            {
                log.Error(ex);
            }
        }
예제 #3
0
파일: CsvLoader.cs 프로젝트: rattuscz/Sink
        private static List <Models.CacheIPRange> LoadIPRanges()
        {
            var result = new List <Models.CacheIPRange>();
            var csv    = new CsvHelper.CsvReader(File.OpenText("ranges.csv"));

            while (csv.Read())
            {
                var       ipfrom = csv.GetField(0);
                IPAddress ipaddrfrom;
                if (!IPAddress.TryParse(ipfrom, out ipaddrfrom))
                {
                    break;
                }

                var       ipto = csv.GetField(1);
                IPAddress ipaddrto;
                if (!IPAddress.TryParse(ipfrom, out ipaddrto))
                {
                    break;
                }

                var            fromlist = ipaddrfrom.GetAddressBytes().ToList();
                var            tolist   = ipaddrto.GetAddressBytes().ToList();
                BigMath.Int128 outFrom;
                BigMath.Int128 outTo;
                if (fromlist.Count == 4)
                {
                    outFrom = new BigMath.Int128(BitConverter.ToUInt32(fromlist.Take(4).ToArray(), 0));
                    outTo   = new BigMath.Int128(BitConverter.ToUInt32(tolist.Take(4).ToArray(), 0));
                }
                else
                {
                    outFrom = new BigMath.Int128(BitConverter.ToUInt64(tolist.Take(8).ToArray(), 0), BitConverter.ToUInt64(fromlist.Skip(8).Take(8).ToArray(), 0));
                    outTo   = new BigMath.Int128(BitConverter.ToUInt64(tolist.Take(8).ToArray(), 0), BitConverter.ToUInt64(tolist.Take(8).ToArray(), 0));
                }


                var item = new Models.CacheIPRange
                {
                    IpFrom   = Kres.Man.Models.Int128.Convert(outFrom),
                    IpTo     = Kres.Man.Models.Int128.Convert(outTo),
                    Identity = csv.GetField(2),
                    PolicyId = Convert.ToInt32(csv.GetField(3))
                };
                result.Add(item);
            }

            return(result);
        }