⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 symmetricnathandler.cs

📁 破解的飞信源代码
💻 CS
字号:
namespace NCindy.Protocol.RUDP.NATTraversal
{
    using System;
    using System.Collections.Generic;
    using System.Net;

    public class SymmetricNATHandler : NATHandler
    {
        protected static readonly double MAX_STD_DEV = 5;
        protected static readonly double SAFETY = 2;

        public override bool CanHandleNAT(List<NATHistoryPoint> history)
        {
            return (0 < this.PredictPorts(history).get_Count());
        }

        protected List<IPEndPoint> PredictPorts(List<NATHistoryPoint> ndps)
        {
            int num = 0;
            int num2 = -2147483648;
            int num3 = -1;
            uint num4 = 0;
            uint num5 = 0;
            bool flag = false;
            IPAddress address = null;
            List<NATHistoryPoint>.Enumerator enumerator = ndps.GetEnumerator();
            try
            {
                while (enumerator.MoveNext())
                {
                    NATHistoryPoint point = enumerator.get_Current();
                    if (!(point is SocketClosePoint))
                    {
                        IPEndPoint peerViewOfLocalEndPoint = point.PeerViewOfLocalEndPoint;
                        if (peerViewOfLocalEndPoint != null)
                        {
                            int port = peerViewOfLocalEndPoint.Port;
                            if (!flag)
                            {
                                address = peerViewOfLocalEndPoint.Address;
                                num3 = port;
                                flag = true;
                            }
                            if (num2 > port)
                            {
                                uint num7 = (uint) (num2 - port);
                                num++;
                                num4 += num7;
                                num5 += num7 * num7;
                            }
                            num2 = port;
                        }
                    }
                }
            }
            finally
            {
                enumerator.Dispose();
            }
            List<IPEndPoint> list = new List<IPEndPoint>();
            if (num > 1)
            {
                double num8 = num;
                double num9 = num4;
                double num10 = num9 / num8;
                double d = num5 - ((num9 * num9) / num8);
                d /= (double) (num - 1);
                double num12 = Math.Sqrt(d);
                if (num12 >= MAX_STD_DEV)
                {
                    return list;
                }
                try
                {
                    double num13 = num10 + (SAFETY * num12);
                    if (num13 < (num10 + 0.001))
                    {
                        num13 = num10 + 1.001;
                    }
                    for (int i = (int) (num10 - (SAFETY * num12)); i < num13; i++)
                    {
                        if (i > 0)
                        {
                            int num15 = num3 + i;
                            list.Add(new IPEndPoint(address, num15));
                        }
                        else
                        {
                            num13 += 1.001;
                        }
                    }
                }
                catch
                {
                }
            }
            return list;
        }

        public override List<IPEndPoint> TargetEndPoints(List<NATHistoryPoint> history)
        {
            return this.PredictPorts(history);
        }
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -