示例#1
0
        public override int GetHashCode()
        {
            int hash = 1;

            if (Mark != 0)
            {
                hash ^= Mark.GetHashCode();
            }
            if (Tfo != 0)
            {
                hash ^= Tfo.GetHashCode();
            }
            if (Tproxy != 0)
            {
                hash ^= Tproxy.GetHashCode();
            }
            if (ReceiveOriginalDestAddress != false)
            {
                hash ^= ReceiveOriginalDestAddress.GetHashCode();
            }
            if (BindAddress.Length != 0)
            {
                hash ^= BindAddress.GetHashCode();
            }
            if (BindPort != 0)
            {
                hash ^= BindPort.GetHashCode();
            }
            if (_unknownFields != null)
            {
                hash ^= _unknownFields.GetHashCode();
            }
            return(hash);
        }
示例#2
0
        public override int GetHashCode()
        {
            int hash = 1;

            if (Mark != 0)
            {
                hash ^= Mark.GetHashCode();
            }
            if (Tfo != global::V2Ray.Core.Transport.Internet.SocketConfig.Types.TCPFastOpenState.AsIs)
            {
                hash ^= Tfo.GetHashCode();
            }
            if (Tproxy != global::V2Ray.Core.Transport.Internet.SocketConfig.Types.TProxyMode.Off)
            {
                hash ^= Tproxy.GetHashCode();
            }
            if (ReceiveOriginalDestAddress != false)
            {
                hash ^= ReceiveOriginalDestAddress.GetHashCode();
            }
            if (BindAddress.Length != 0)
            {
                hash ^= BindAddress.GetHashCode();
            }
            if (BindPort != 0)
            {
                hash ^= BindPort.GetHashCode();
            }
            if (_unknownFields != null)
            {
                hash ^= _unknownFields.GetHashCode();
            }
            return(hash);
        }
示例#3
0
 public void Serialize(XmlWriter writer)
 {
     writer.WriteStartElement("xsp-options");
     if (BindAddress != null)
     {
         writer.WriteElementString("bindaddress", BindAddress.ToString());
     }
     if (Port != null)
     {
         writer.WriteElementString("port", ((int)Port).ToString());
     }
     if (BindRange != null)
     {
         writer.WriteStartElement("bindrange");
         writer.WriteElementString("from", BindRange[0].ToString());
         writer.WriteElementString("to", BindRange[1].ToString());
         writer.WriteEndElement();
     }
     if (CustomErrorsOff != null)
     {
         writer.WriteElementString("customerrorsoff", ((bool)CustomErrorsOff).ToString());
     }
     if (LocalDirectory != null)
     {
         writer.WriteElementString("localdir", LocalDirectory);
     }
     writer.WriteEndElement();
 }
示例#4
0
 /// <summary>Returns a hash value for this object.</summary>
 public override int GetHashCode()
 {
     unchecked
     {
         var hash = (BindAddress == null ? 0 : BindAddress.GetHashCode() * 63689) + Port;
         if (Secure)
         {
             hash *= 3;
         }
         return(hash);
     }
 }
示例#5
0
        public override byte[] GetBytes()
        {
            int nLength = 6;

            if (AddressType == AddressType.IPV4)
            {
                nLength += 4;
            }
            else if (AddressType == AddressType.IPV6)
            {
                nLength += 16;
            }
            else if (AddressType == AddressType.DomainName)
            {
                nLength += (1 + BindDomain.Length);
            }

            m_bBytes    = new byte[nLength];
            m_bBytes[0] = Version;
            m_bBytes[1] = (byte)SOCKSReply;
            m_bBytes[2] = (byte)Reserved;
            m_bBytes[3] = (byte)AddressType;
            if (AddressType == AddressType.IPV4)
            {
                byte[] bAddr = BindAddress.GetAddressBytes();
                Array.Copy(bAddr, 0, m_bBytes, 4, bAddr.Length);

                m_bBytes[4 + bAddr.Length]     = (byte)((BindPort & 0xFF00) >> 8);
                m_bBytes[4 + bAddr.Length + 1] = (byte)((BindPort & 0xFF) >> 0);
            }
            else if (AddressType == AddressType.IPV6)
            {
                byte[] bAddr = BindAddress.GetAddressBytes();
                Array.Copy(bAddr, 0, m_bBytes, 4, bAddr.Length);

                m_bBytes[4 + bAddr.Length]     = (byte)((BindPort & 0xFF00) >> 8);
                m_bBytes[4 + bAddr.Length + 1] = (byte)((BindPort & 0xFF) >> 0);
            }
            else if (AddressType == AddressType.DomainName)
            {
                byte[] bAddr = System.Text.UTF8Encoding.UTF8.GetBytes(BindDomain);
                m_bBytes[4] = 0;
                Array.Copy(bAddr, 0, m_bBytes, 4 + 1, bAddr.Length);

                m_bBytes[4 + 1 + bAddr.Length]     = (byte)((BindPort & 0xFF00) >> 8);
                m_bBytes[4 + 1 + bAddr.Length + 1] = (byte)((BindPort & 0xFF) >> 0);
            }


            return(m_bBytes);
        }
示例#6
0
        /// <summary>
        /// UDP HolePunchingでUDP接続する
        /// </summary>
        /// <param name="PortNumber"></param>
        /// <returns></returns>
        internal (Socket s, IPEndPoint p) UdpConnect(int PortNumber)
        {
            var        WaitingServerAddress = IPAddress.Any;
            IPEndPoint groupEP = new IPEndPoint(WaitingServerAddress, PortNumber);

            //クライアントが設定してくるIPあどれっす
            string TargetAddress;

            //クライアントからのメッセージ(UDPホールパンチング)を待つ
            //groupEPにNATが変換したアドレス+ポート番号は入ってくる
            using (var udpClient = new UdpClient(PortNumber))
            {
                //Udp Hole Puchingをするために何かしらのデータを受信する(ここではクライアントが指定したサーバのアドレス)
                TargetAddress = Encoding.UTF8.GetString(udpClient.Receive(ref groupEP));
            }

            //NATで変換されたIPアドレスおよびポート番号
            var ip   = groupEP.Address.ToString();
            var port = groupEP.Port;

            var PunchingSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
            //ソースアドレスを設定する(NATが変換できるように、クライアントが指定した宛先を設定)
            IPAddress BindAddress;

            try
            {
                BindAddress = IPAddress.Parse(TargetAddress);
                Logger.LogInformation($"BindAddress : {BindAddress.ToString()}");
                PunchingSocket.Bind(new IPEndPoint(BindAddress, PortNumber));
            }
            catch
            {
                try
                {
                    BindAddress = NetworkInterface.IPAddresses[0];
                    Logger.LogInformation($"BindAddress : {BindAddress.ToString()}");
                    PunchingSocket.Bind(new IPEndPoint(BindAddress, PortNumber));
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }

            var PunchingPoint = new IPEndPoint(IPAddress.Parse(ip), port);

            return(PunchingSocket, PunchingPoint);
        }
示例#7
0
        private Boolean TryBind()
        {
            ServerSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

            try
            {
                ServerSocket.Bind(LocalEP);
                Logger.Info("Server bound to " + BindAddress.ToString() + ":" + BindPort);
                return(true);
            }
            catch (Exception e)
            {
                Logger.Fatal(e);
            }

            return(false);
        }
示例#8
0
 public void SaveToRegistry()
 {
     using (var key = Registry.CurrentUser.CreateSubKey(RegKeyBase))
     {
         key.SetValue("SuppressedSymbols", SuppressedSymbols.ToArray());
         key.SetValue("EnableSuppression", EnableSuppression.ToString());
         key.SetValue("BindAddress", BindAddress.ToString());
         key.SetValue("BindPort", BindPort.ToString());
         key.SetValue("TraceDirectory", TraceDirectory.ToString());
         var vals = new List <string>();
         foreach (var rm in ModulePathRemappings)
         {
             vals.Add(String.Format("{0}|{1}|{2}", rm.Platform, rm.Path, rm.ReplacementPath));
         }
         key.SetValue("ModulePathRemappings", vals.ToArray());
         key.SetValue("SymbolPaths", SymbolPaths.ToArray());
     }
 }
示例#9
0
        public void Start()
        {
            Stop();

            http_server = new HttpFileServer(HTTPPort, ServerDirectory);
            http_server.Start();

            tftp_server = new TFTPServer(BindAddress, TFTPPort, ServerDirectory);

            var net = new IPSegment(BindAddress.ToString(), NetMask.ToString());

            dhcp_server              = new DHCPServer(BindAddress, DHCPPort);
            dhcp_server.Loader       = loader;
            dhcp_server.HTTPBootFile = HTTPBootFile;
            dhcp_server.SubnetMask   = IPAddress.Parse("255.255.255.0");
            dhcp_server.PoolStart    = net.Hosts().First().ToIpAddress();
            dhcp_server.PoolEnd      = net.Hosts().Last().ToIpAddress();
            dhcp_server.Start();
        }
示例#10
0
        private void MnuSetBasicAddress_Click(object sender, System.EventArgs e)
        {
            if (olvAddresses.SelectedObject == null)
            {
                return;
            }

            GoogleAddress basicAddress = olvAddresses.SelectedObject as GoogleAddress;
            var           allAddresses = olvAddresses.CollectCheckedObjects <Address>(ObjectListViewHelper.ObjectListViewCollector.All);
            Bind          sourceBind   = this.BindAlternative ?? this.Bind;

            BindAddress newBindAddress = BindAddress.Create(allAddresses, basicAddress);

            Bind newBind = new Bind {
                Address = newBindAddress, Addresses = allAddresses, Description = sourceBind.Description, OriginalAddress = sourceBind.OriginalAddress
            };

            this.BindAlternative = newBind;

            UpdateBindInfo(newBind);
        }
示例#11
0
        public void Run()
        {
            if (!TryBind())
            {
                Logger.Fatal("Unable to bind to " + BindAddress.ToString() + ":" + BindPort);
            }

            ServerSocket.Listen(0);
            Running = true;

            WorldManager.Init();
            if (WorldManager.Worlds.Count == 0)
            {
                WorldManager.AddWorld(new World.World(WorldManager, "awesome_world", true));
            }

            TickTimer = new Timer(new TimerCallback(Tick), null, 0, 50);

            Socket clientSocket;
            Client client;
            Thread clientThread;

            while (Running)
            {
                clientSocket = ServerSocket.Accept();
                client       = new Client(this, clientSocket);
                Clients.Add(clientSocket, client);

                clientThread = new Thread(client.Run);
                ClientThreads.Add(client, clientThread);
                clientThread.Start();

                Logger.Info("New Connection: " + clientSocket.RemoteEndPoint);
                TotalEntityCount++;
            }

            Shutdown();
        }
示例#12
0
        public void StartProcess(ProgressDialog dialog, DoWorkEventArgs e)
        {
            this.ProgressDialog = dialog;
            List <Bind> binds = new List <Bind>();

            ProgressDialog.ReportProgress(-1, null, "Импорт данных..", null);
            InitializeExcelApplication();
            xlWorkBook = OpenWorkbook(this.excelFile);

            try
            {
                Excel.Worksheet xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.Item[1];
                Excel.Range     workRange   = xlWorkSheet.Cells.SpecialCells(Excel.XlCellType.xlCellTypeLastCell);

                int       lastRow    = workRange.Row;
                const int firstRow   = 2;
                int       bindsCount = lastRow - firstRow + 1;
                int       done       = 0;
                this.ProgressDialog.Maximum = bindsCount;

                for (int i = firstRow; i <= lastRow; i++)
                {
                    Bind bind = new Bind();
                    bind.OriginalAddress = xlWorkSheet.Range["A" + i].Value?.ToString();
                    bind.Description     = xlWorkSheet.Range["K" + i].Value?.ToString();

                    string country, region, city, district, street, streetNumber, zip, placeId;
                    country      = GetRangeString(xlWorkSheet.Range["D" + i]);
                    region       = GetRangeString(xlWorkSheet.Range["E" + i]);
                    city         = GetRangeString(xlWorkSheet.Range["F" + i]);
                    district     = GetRangeString(xlWorkSheet.Range["G" + i]);
                    street       = GetRangeString(xlWorkSheet.Range["H" + i]);
                    streetNumber = GetRangeString(xlWorkSheet.Range["I" + i]);
                    zip          = GetRangeString(xlWorkSheet.Range["J" + i]);
                    placeId      = GetRangeString(xlWorkSheet.Range["M" + i]);

                    string formatted = $"{country}, {city}, {street}, {streetNumber}".TrimEnd(',', ' ');

                    string latlon = xlWorkSheet.Range["B" + i].Value.ToString() + "," + xlWorkSheet.Range["C" + i].Value.ToString();
                    if (Location.TryParse(latlon, out Location location))
                    {
                        BindAddress address = new BindAddress(formatted, location, "Google")
                        {
                            Country      = country,
                            Region       = region,
                            City         = city,
                            District     = district,
                            Street       = street,
                            StreetNumber = streetNumber,
                            Zip          = zip,
                            PlaceId      = placeId
                        };

                        bind.Address = address;
                        binds.Add(bind);
                        done++;
                        ProgressDialog.ReportProgress(done, null, $"Обработано строк: {done} / {bindsCount}", null);
                    }
                    else
                    {
                        throw new System.Exception("Ошибка чтения координат в строке " + i.ToString());
                    }
                }
                e.Result = binds;
            }
            finally
            {
                xlWorkBook.Close();
                ExitExcelApplication();
            }
        }