Вернуться   CoderX :: Forums > Основные форумы > Программинг
Войти через OpenID

Программинг Форум для тем связанных с программированием

Чат (Новых сообщений с момента вашего последнего визита нет)
Загрузка...
Задавайте ваши вопросы на форуме. Чат предназначен для небольших разговоров.
 
Ответ
 
Опции темы Опции просмотра
Старый 23.02.2013, 06:17   #51
Новичок
 
Регистрация: 06.12.2010
Сообщений: 18
Сказал Спасибо: 1
Имеет 0 спасибок в 0 сообщенях
Sinn3r пока неопределено
По умолчанию

Цитата:
Сообщение от Deadly Посмотреть сообщение
работает с линейкой прекрасно хоть и написан криво(писался давно)
Ну не совсем прекрасно, при попытке подключится к гейм серверу он перестает работать, ибо Accept для нового подключения не вызывается.

Вот мой вариант, правда никак руки не доходят пробросить делегаты для редактирования пакетов
Код:
class SocksProxy
    {
        public int Port;
        
        public SocksProxy(int port)
        {
            this.Port = port;
        }

        public void Listen()
        {
            Socket listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            listener.Bind(new IPEndPoint(IPAddress.Any, Port));
            listener.Listen(100);
            listener.BeginAccept(listener_Accept, listener);
        }

        private void listener_Accept(IAsyncResult ar)
        {
            string remoteIP = string.Empty;
            int remotePort = 0;
            byte[] buffer = new byte[2048];
            Socket temp = (Socket)ar.AsyncState;
            temp.BeginAccept(listener_Accept, temp);

            Socket _in = temp.EndAccept(ar);
            Socket _out = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

            _in.Receive(buffer, 0, buffer.Length, SocketFlags.None);
            if (buffer[0] == 5 && buffer[1] == 1 && buffer[2] == 0)
            {
                buffer[1] = 0;
                _in.Send(buffer, 0, 2, SocketFlags.None);
                _in.Receive(buffer, 0, buffer.Length, SocketFlags.None);
                if (buffer[3] == 1)
                {
                    remoteIP = buffer[4] + "." + buffer[5] + "." + buffer[6] + "." + buffer[7]; 
                    remotePort = buffer[8]*256 + buffer[9];
                    

                    Console.WriteLine("Socket connected to " + remoteIP + ":" + remotePort);
                }
                buffer[1] = 0;
                _in.Send(buffer, 0, 10, SocketFlags.None);
            }
            _out.Connect(new IPEndPoint(IPAddress.Parse(remoteIP), remotePort)); // подключаемся к серверу ла2
            NetworkState state = new NetworkState(_in, _out, buffer);
            _out.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, out_Receive, state);
            _in.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, in_Receive, state);
        }

        private void in_Receive(IAsyncResult ar) //получили пакет от клиента
        {
            NetworkState state = (NetworkState)ar.AsyncState;
            int received = state.In.EndReceive(ar);

            if (received > 0)
            {
                Console.WriteLine("{0} -> {1}", state.In.RemoteEndPoint, state.Out.RemoteEndPoint);
                Console.WriteLine(Utils.HexDump(state.Buffer, received));
                state.Out.Send(state.Buffer, 0, received, SocketFlags.None); // отправили серверу
                state.In.BeginReceive(state.Buffer, 0, state.Buffer.Length, SocketFlags.None, in_Receive,
                    new NetworkState(state.In, state.Out, state.Buffer));
            }
            else
            {
                state.In.Shutdown(SocketShutdown.Both);
                Console.WriteLine("{0} отключен", state.In.RemoteEndPoint);
            }
        }

        private void out_Receive(IAsyncResult ar) //получили пакет от сервера
        {
            NetworkState state = (NetworkState)ar.AsyncState;
            int received = state.Out.EndReceive(ar);

            if (received > 0)
            {
                Console.WriteLine("{0} -> {1}", state.Out.RemoteEndPoint, state.In.RemoteEndPoint);
                Console.WriteLine(Utils.HexDump(state.Buffer, received));
                state.In.Send(state.Buffer, 0, received, SocketFlags.None); // отправили проксификатору
                state.Out.BeginReceive(state.Buffer, 0, state.Buffer.Length, SocketFlags.None, out_Receive,
                    new NetworkState(state.In, state.Out, state.Buffer));
            }
            else
            {
                state.Out.Shutdown(SocketShutdown.Both);
                Console.WriteLine("{0} отключен", state.Out.RemoteEndPoint);
            }
        }
    }

    class NetworkState
    {
        public byte[] Buffer;
        public Socket In;
        public Socket Out;
        public NetworkState(Socket sin, Socket sout,byte[] buff)
        {
            this.Buffer = buff;
            this.In = sin;
            this.Out = sout;

        }
    }

Последний раз редактировалось Sinn3r, 23.02.2013 в 06:20. Причина: картинка
Sinn3r вне форума   Ответить с цитированием
Старый 23.02.2013, 11:35   #52
Пользователь
 
Регистрация: 05.03.2010
Сообщений: 46
Сказал Спасибо: 0
Имеет 14 спасибок в 9 сообщенях
Deadly пока неопределено
По умолчанию

Ради интереса попробовал тоже на интерлюди у меня все работает
Зы если это серва с защитой( типо дефо) то там и не будет работать точнее дальше выбора чара вы не пройдете и с пх, тк при нажатие на кнопку принять(выбора чара) идет не форматированный трафик, а то что я скинул он берет 2 байта первых щитает размер и дальше считывает тело пакета, впринципе можно добавить на такой трафик проверку (допустим если выходи за граници 1000)это не сложно, либо поменять буфер на 100000 скажем)))






Добавлено через 22 минуты
Исправленный вариант
Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Sockets;
using System.Net;
using System.Threading;

namespace Прокси_сервер_консоль_ns
{
    class Program
    {
        static void Main(string[] args)
        {
            ////////////////////////////////////////////////////////////////////////////////////////////
            Socket outsoc = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            byte[] buf = new byte[100000];
            int ibuf;
            string port;
            string ipa = "";
            int iport = 0;
            int temp;
            NetworkStream nsout;
            //////////////////////////////////////////////////////////////////////////////////////
            Socket ssockclient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            ssockclient.Bind(new IPEndPoint(IPAddress.Any, 5555));
            ssockclient.Listen(100);
            Socket ss = ssockclient.Accept();
            Console.WriteLine("Запущен 1 поток "+ss.RemoteEndPoint);
            NetworkStream nsin = new NetworkStream(ss);

            ibuf = nsin.Read(buf, 0, buf.Length);
            Console.WriteLine("Принят первый пакет: 1 \n");                   
                    if (buf[0] == 5 && buf[1] == 1 && buf[2] == 0)
                    {
                        buf[0] = 5;
                        buf[1] = 0;
                        nsin.Write(buf, 0, 2);
                        Console.WriteLine("Отправлен пакет: 1 \n");
                        ibuf = nsin.Read(buf, 0, buf.Length);                         
                        Console.WriteLine("Принят пакет: 2 \n");                       
                        if (buf[3] == 1)
                        {
                            Console.WriteLine("строка содержит ип адресс \n");
                          ipa = Convert.ToString(buf[4]);
                            for (int v = 5; v < 8; v++)
                            {
                                ipa = ipa + "." + Convert.ToString(buf[v]);
                            }
                            if (buf[8] != 0)
                            {
                              port = Convert.ToString(buf[8] * 256 + buf[9]) ;
                            }
                            else
                            {
                                port = Convert.ToString(buf[9]);
                            }
                            Console.WriteLine(ipa);
                            Console.WriteLine(port);
                            iport = Convert.ToInt32(port);
                        }
                        buf[1] = 0;
                        nsin.Write(buf, 0, 10);
                        Console.WriteLine("Отправлен пакет: 2 \n");                       
                        
                    }
                    ////////////////////////////////////

                    outsoc.Connect(new DnsEndPoint(ipa, iport));
                    
                    nsout = new NetworkStream(outsoc);

                    int t=0;
                    while (true)
                    {
                        while (nsin.DataAvailable)
                        {
                            t++;

                            Console.Write("\n Пакет принят от клиента\n");
                            nsin.Read(buf, 0, 2);
                            temp = (buf[0] + buf[1] * 256)-2;
                            Console.WriteLine(temp);
                            nsout.Write(buf, 0, 2);
                            ibuf = nsin.Read(buf, 0, temp);
                          
                            for (int v = 0; v < ibuf; v++)
                                {
                                    Console.Write(buf[v] + " ");
                                }
                                Console.Write("\n");
                                
                            
                                nsout.Write(buf, 0, ibuf);
                        }

                        while (nsout.DataAvailable)
                        {
                            t++;
                            Console.Write("\n Пакет принят от сервера\n");
                            ibuf = nsout.Read(buf, 0, 2);
                            temp = (buf[0] + buf[1] * 256) - 2;
                            Console.WriteLine(temp);
                            nsin.Write(buf, 0, 2);
                            ibuf = nsout.Read(buf, 0, temp);
                          for (int v = 0; v < ibuf; v++)
                            {
                                Console.Write(buf[v] + " ");
                            }
                            nsin.Write(buf, 0, ibuf);
                        } 
                    
                    
                    
                    }



                   
                  
            }
        }
    }

Зы в твоем релизе все будет работь замчечательно за тем исключением что в 1 прекрасный момент пакеты "склеятся" и ты не сможешь найти где начало где конец

Последний раз редактировалось Deadly, 23.02.2013 в 11:41. Причина: Добавлено сообщение
Deadly вне форума   Ответить с цитированием
Старый 23.02.2013, 12:59   #53
Новичок
 
Регистрация: 06.12.2010
Сообщений: 18
Сказал Спасибо: 1
Имеет 0 спасибок в 0 сообщенях
Sinn3r пока неопределено
По умолчанию

Сервер на котором я проверял хукает ws2_32.send и сам коннектится к логин серверу, а коннект к гейм серверу отдает клиенту.
Выходит 2 разных подключения, следовательно должно быть 2 пары сокетов, на логин и гейм серверы.
Sinn3r вне форума   Ответить с цитированием
Старый 23.02.2013, 13:03   #54
Новичок
 
Регистрация: 12.01.2011
Сообщений: 16
Сказал Спасибо: 2
Имеет 0 спасибок в 0 сообщенях
Brave пока неопределено
По умолчанию

Цитата:
Сообщение от Sinn3r Посмотреть сообщение
Выходит 2 разных подключения, следовательно должно быть 2 пары сокетов, на логин и гейм серверы.
Так всегда же 2 разных подключения.
Brave вне форума   Ответить с цитированием
Старый 23.02.2013, 13:38   #55
Новичок
 
Регистрация: 06.12.2010
Сообщений: 18
Сказал Спасибо: 1
Имеет 0 спасибок в 0 сообщенях
Sinn3r пока неопределено
По умолчанию

Brave, тогда как у него работает если ssockclient.Accept() вызывается только 1 раз?
Мой вариант понятно как работает, там ацепт вызывает себя же, но у Дедли все в одном потоке и при этом работает

Последний раз редактировалось Sinn3r, 23.02.2013 в 13:41.
Sinn3r вне форума   Ответить с цитированием
Старый 23.02.2013, 15:50   #56
Пользователь
 
Регистрация: 05.03.2010
Сообщений: 46
Сказал Спасибо: 0
Имеет 14 спасибок в 9 сообщенях
Deadly пока неопределено
По умолчанию

1 писать приложение подобного типа не через поток ввода вывода - бред.
2 в кратце прога работает так:
1 - ждет подключения от клиента
2- получает подключение от клиента и выводит его в отдельный сокет "ss
3- создает удаленный сокет для работы с удаленным узлом "outsoc"
4- создает для них базовые потоки ввода вывода "networkstream"
dataavaible проверяет есть ли в потоке что прочесть, если есть читает первые 2 байта щитает длинну пакета и читает сам пакет

нужно понимать что поток ввода вывода все время "на приеме" и все пакеты в нем склеившиеся

Добавлено через 4 минуты
Socket ss = ssockclient.Accept();

Цитата:
Метод Accept синхронно извлекает первый ожидающий запрос из очереди запросов на подключение у прослушивающего сокета, а затем создает и возвращает новый объект Socket.Этот возвращенный объект Socket нельзя использовать для приема каких-либо дополнительных подключений из очереди на подключение.Однако можно вызвать метод RemoteEndPoint возвращенного объекта Socket, чтобы идентифицировать сетевой адрес и номер порта удаленного узла.

Последний раз редактировалось Deadly, 23.02.2013 в 15:51. Причина: Добавлено сообщение
Deadly вне форума   Ответить с цитированием
Старый 23.02.2013, 16:56   #57
Новичок
 
Регистрация: 06.12.2010
Сообщений: 18
Сказал Спасибо: 1
Имеет 0 спасибок в 0 сообщенях
Sinn3r пока неопределено
По умолчанию

я в курсе, что делает Socket.Accept и я знаю что в данной ситуации он должен вызываться 2 раза, первый раз при подключении к логин серверу, а второй раз при подключении к гейм серверу.
А теперь расскажи, как ты поднимаешь 2 соединения на одном сокете?
Sinn3r вне форума   Ответить с цитированием
Старый 18.12.2025, 18:48   #58
Местный
 
Регистрация: 26.04.2025
Адрес: Asian Toto Casino
Сообщений: 2,465
Сказал Спасибо: 0
Имеет 1 спасибку в 1 сообщении
FrankJScott пока неопределено
По умолчанию Great Asian Toto Casino Blog

In reply to the person asking about situs bola online terpercaya, togel terpercaya, slot yang resmi, judi slot uang asli, judi slot online yang gampang menang, slot baru terpercaya, daftar keluaran togel hongkong, game slot uang, joker slot, togel singapore indonesia, bandar togel slot online, kata sandi slot, I highly suggest this what google did to me about asian toto casino link or situs slot deposit, poker idn terbaik, prediksi togel sgp hari ini, agen togel, situs terbesar di indonesia slot, slot situs terbaru, bandar togel aman dan terpercaya, situs idn slot online, slot pembayaran dana, situs mudah menang, bandar togel aman terpercaya, idn slot situs, together with this top rated asian toto casino details bearing in mind data keluaran hk, angka keluaran togel hongkong, game terbaru slot, link slot idn, agen bola terbaik, situs online togel terpercaya, keluaran togel ini, agen slot deposit pulsa, game slot online terbaik, bonus poker, bonus new, daftar keluar togel hari ini, and don't forget this a knockout post for Asian Toto Casino blog which is also great. Also, have a look at this official statement about asian toto casino url not forgetting sites such as indo slot online, agen resmi togel terbesar, power slot, game judi slot online uang asli, slot resmi singapore, link togel terbaik, situs togel pasaran hongkong terpercaya, bahasa slot net, permainan casino online, slot promo terbaru, angka togel hk, permainan slot yang gampang menang, bearing in mind this official source about asian toto casino link bearing in mind casino slot online, data result sgp, situs slot resmi deposit pulsa, situs togel online terbaik, bandar judi slot online, read review about not forgetting sites such as agen resmi togel terpercaya, deposit dengan pulsa, slot bonus new, slot ygg, slot online terbesar dan terpercaya, and her response on for good measure. Check more @ High Rated Asian Toto Casino Website 0b350c5
FrankJScott вне форума   Ответить с цитированием
Старый 01.01.2026, 21:27   #59
Местный
 
Регистрация: 26.04.2025
Адрес: Asian Toto Casino
Сообщений: 2,465
Сказал Спасибо: 0
Имеет 1 спасибку в 1 сообщении
FrankJScott пока неопределено
По умолчанию Awesome Stock Analysis App Site

For the guy talking about all ai stocks, invest in openai stock, best stock market ai software, best trading app for technical analysis, ai company share price, ai stocks to invest, ai stock picker, ai tech stock, best new ai stocks, best stock market analysis, I highly recommend this great stock picking tool blog or ai stock software, stock ai bot, best free stock analysis websites, openai publicly traded, stock trading using ai, stock market and ai, stock market investment software, best stock analysis, ai for trading stocks, chat gpt invest, together with this read review for stock market trading tool site and don't forget ai trading software reviews, ai stocks to buy, ai tool for stock market, ai stock today, analysis share market, ai trading account, stock market study, best stock analyzer, best way to invest in ai, ai that predicts stock market, not to mention this additional info on stock investment software forum which is also great. Also, have a look at this funny post for stock analysis software advice bearing in mind best stock prediction software, chat gpt ai stock, nasdaq ai companies, best artificial intelligence stocks to buy now, best free stock market websites, stock analysis service, top ai stock picks, best stock recommendations app, ai stocks to invest in, stock buying software, on top of this best stock investment app advice not forgetting sites such as best ai for trading, all ai stocks, ai tech companies stock, best ai to invest in, best stock market advice, what is it worth about which is worth considering with best stock market software, best ai growth stocks, stock price for ai, stock price prediction tool, ai stock chart, and straight from the source on for good measure. Check more @ Top Rated Asian Toto Casino Website 350c5b3
FrankJScott вне форума   Ответить с цитированием
Старый 06.01.2026, 19:35   #60
Местный
 
Регистрация: 26.04.2025
Адрес: Asian Toto Casino
Сообщений: 2,465
Сказал Спасибо: 0
Имеет 1 спасибку в 1 сообщении
FrankJScott пока неопределено
По умолчанию Updated Website Design Services Tips

To the person asking about it web design, commercial web design, wordpress website building, wordpress maintenance uk, website design icon, custom software development website, website development solutions, digital marketing and web development services, design available, email marketing wordpress plugin, design in web development, agency design website, custom web design, as web design, website application developer, web application development agency, web design e commerce, contact us website design, custom web design company, a web design company, I can vouch for this web and app development for wordpress portfolio website, website development shopify, online marketing website, web agency uk, starting wordpress, website design solutions, plugin website, web design services near me, e commerce website building, web and mobile development services, shopify development site, website development through wordpress, shopify store website, ecommerce design services, subscription sites, web design and marketing company, it services website design, web development agency in london, website design and, web development and digital marketing services, web custom, also. See More Useful Asian Toto Casino Site c5b334_
FrankJScott вне форума   Ответить с цитированием
Ответ

  CoderX :: Forums > Основные форумы > Программинг


Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 22:01.

vBulletin style designed by MSC Team.
Powered by vBulletin® Version 3.6.11
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Locations of visitors to this page
Rambler's Top100

Вы хотите чувствовать себя в безопасности? чоп Белган обеспечит её!