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

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

Чат (Новых сообщений с момента вашего последнего визита нет)
Загрузка...
Задавайте ваши вопросы на форуме. Чат предназначен для небольших разговоров.
 
Ответ
 
Опции темы Опции просмотра
Старый 23.02.2013, 00:42   #1
Пользователь
 
Регистрация: 05.03.2010
Сообщений: 46
Сказал Спасибо: 0
Имеет 14 спасибок в 9 сообщенях
Deadly пока неопределено
По умолчанию

Нашел у себя в захромах этот код можно использовать как пример) это к слову как расклеивать пакеты на сервере работает с линейкой прекрасно хоть и написан криво(писался давно)) показывает размер пакета и сам пакет(не дешефруя) можете посмотреть как текут пакеты на руофе ну и 1 - 2 пакет дальше будут шифрованы
как пример может кому пригодится:
Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Sockets;
using System.Net;
using System.Threading;

namespace L2_test
{
    class Program
    {
        static void Main(string[] args)
        {
            ////////////////////////////////////////////////////////////////////////////////////////////
            Socket outsoc = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            byte[] buf = new byte[1000];
            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);
        
                    
                    while (true)
                    {
                        while (nsin.DataAvailable)
                        {
                            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)
                        {
                            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);
                        } 
                    
                    
                    
                    }
// проксифицировать через проксифиер или тп, протокол сокс 5)

Последний раз редактировалось Deadly, 23.02.2013 в 00:45.
Deadly вне форума   Ответить с цитированием
Старый 23.02.2013, 06:17   #2
Новичок
 
Регистрация: 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 вне форума   Ответить с цитированием
Ответ

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



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

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


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

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

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