Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.09.2016, 19:20   #1
a.n.o.n.i.m
Форумчанин
 
Регистрация: 26.02.2011
Сообщений: 301
Стрелка Расшарить смысл

Вопрос таков, расшарить бы собственно в лоб а что надо собственно сделать то?

Есть задание

С помощью библиотек SharpPcap и PacketDotNet сделать следующее:

Первая консолька создает tcp-пакет, инкапсулирует в него текст (TcpPacket.PlayloadData) и отправляет в сеть.

Вторая консолька перехватывает отправленные пакеты, извлекает данные, выводит на экран.

Мысль такая пришла, использовать сокеты, подключившись к ип:порту одному, с обоих консолек. Слать с одной на другую строчку с текстом, на другом принимать ее и отображать. Это ладно.

Вопрос вот в чем:
1) Как в одной консольке этот текст инкапсулировать и отравить, а на другой РАЗинкапсулировать и открыть?
2) Что вообще такое TcpPacket.PlayloadData ?

Может кто какой код в пример приведет, или ключевых слов писанет куда копать, натолкните на мысль пожалуйста)
a.n.o.n.i.m вне форума Ответить с цитированием
Старый 17.09.2016, 19:45   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

а давайте вы лучше скажете что сделать надо?

обмениваться данными между программами?(причем лучше объектами как я понял)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 17.09.2016, 19:57   #3
a.n.o.n.i.m
Форумчанин
 
Регистрация: 26.02.2011
Сообщений: 301
По умолчанию

Как бы это странно не звучало, но я сам не доконца понимаю а что сделать то надо)) думал может вы подскажите
a.n.o.n.i.m вне форума Ответить с цитированием
Старый 17.09.2016, 20:13   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
2) Что вообще такое TcpPacket.PlayloadData ?
данные пакета.
Цитата:
1) Как в одной консольке этот текст инкапсулировать и отравить, а на другой РАЗинкапсулировать и открыть?
инкапсулировать в данном случае это просто положить, и наоборот.
переводите строку в байты и пишете в пакет, и наоборот.

упустил строку что это задание
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 17.09.2016, 20:19   #5
a.n.o.n.i.m
Форумчанин
 
Регистрация: 26.02.2011
Сообщений: 301
По умолчанию

1)Инкапсуляция это же значит что данные нельзя перехватить при пересылке кому нибудь или это не так?

2)Тоесть это обычная отправка сообщения, ну взять строчку, загнать как вы сказали в byte[] и послать на второй конец, в этом и есть весь смысл ? а TcpPacket.PlayloadData эту тогда куда девать?
a.n.o.n.i.m вне форума Ответить с цитированием
Старый 17.09.2016, 20:23   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

1)нет, то что вы сказали это шифрование.
в данном случае это на самом деле обычное TCP, просто сказано умными словами
а более точно, тут дело в том что ваш TCP-пакет несет в себе иное, но он не перестает быть TCP-пакетов, вполне себе инкапсуляция.
2)почти, вы по заданию должны это сделать не стандартными средствами, а с помощью этих библиотек.
PayloadData это содержимое пакета, полезная нагрузка.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 18.09.2016, 08:48   #7
a.n.o.n.i.m
Форумчанин
 
Регистрация: 26.02.2011
Сообщений: 301
По умолчанию

Вопрос теперь только в следующем, в тех библиотеках можно получить список сетевых интерфейсов и выбрать какой то для того чтобы ловить пакеты. А как сделать чтобы он ловил с консольки их?
a.n.o.n.i.m вне форума Ответить с цитированием
Старый 18.09.2016, 10:03   #8
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

одна библиотека создает пакеты, вторая их ловит.
пакеты ходят через сетевые интерфейсы, как не странно.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 18.09.2016, 13:27   #9
a.n.o.n.i.m
Форумчанин
 
Регистрация: 26.02.2011
Сообщений: 301
По умолчанию

Почему не ловиться пакет как tcp пакет, тоесть подскажите как правильно его сформировать?

Код:
using System;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.IO;
using SharpPcap;
using PacketDotNet;

namespace BS_2_1
{
    class Program
    {
        static string text = "";
        static StreamReader file;
        static string patch = Path.Combine(AppDomain.CurrentDomain.BaseDirectory);
        static byte[] msg;

        static void Main(string[] args)
        {
            file = new StreamReader(@patch + "Задание.txt", Encoding.Default);
            while (!file.EndOfStream)
            {
                text += file.ReadLine() + "\r\n";
            }

            msg = Encoding.Default.GetBytes(text);

            TcpPacket tcp =new TcpPacket(8001,8002);
           // tcp.SourcePort = 9999;
         //   tcp.DestinationPort = 8888;
         //   tcp.Syn = true;
         //   tcp.Fin = true;
          //  tcp.Ack = true;
         //   tcp.WindowSize = 500;
          //  tcp.AcknowledgmentNumber = 800;
          //  tcp.SequenceNumber = 800;*/
            tcp.PayloadData = msg;
            
            Console.WriteLine(tcp);


            CaptureDeviceList deviceList = CaptureDeviceList.Instance;
            ICaptureDevice captureDevice = deviceList[0];
            captureDevice.OnPacketArrival += new PacketArrivalEventHandler(Program_OnPacketArrival);
            captureDevice.Open(DeviceMode.Promiscuous, 100);
            //captureDevice.Filter = "ip and tcp";
            captureDevice.StartCapture();
            captureDevice.SendPacket(tcp);
            captureDevice.SendPacket(tcp);
            captureDevice.SendPacket(tcp);

            Console.ReadLine();
            captureDevice.Close();
        }
        
        

        static void Program_OnPacketArrival(object sender, CaptureEventArgs e)
        {
           
            Packet packet = Packet.ParsePacket(e.Packet.LinkLayerType, e.Packet.Data);
            Console.WriteLine("Попал сюда " + packet);
            var tcpPacket = TcpPacket.GetEncapsulated(packet);
            Console.WriteLine("Попал сюда2 " + tcpPacket);
            var ipPacket = IpPacket.GetEncapsulated(packet);
            Console.WriteLine(ipPacket);

            if (tcpPacket != null && ipPacket != null)
            {
                Console.WriteLine("Попал сюда оляля");
                DateTime time = e.Packet.Timeval.Date;
                int len = e.Packet.Data.Length;

                // IP адрес отправителя
                var srcIp = ipPacket.SourceAddress.ToString();
                // IP адрес получателя
                var dstIp = ipPacket.DestinationAddress.ToString();

                // порт отправителя
                var srcPort = tcpPacket.SourcePort.ToString();
                // порт получателя
                var dstPort = tcpPacket.DestinationPort.ToString();
                // данные пакета
                var data = tcpPacket.PayloadPacket;

                Console.WriteLine("{0} {1} {2} {3} {4} ||| {5}", len, srcIp, dstIp, srcPort, dstPort, data);
            }
        }
    }
}
a.n.o.n.i.m вне форума Ответить с цитированием
Старый 18.09.2016, 14:25   #10
a.n.o.n.i.m
Форумчанин
 
Регистрация: 26.02.2011
Сообщений: 301
По умолчанию

Вообщем отправляю, ловлю текст свой, вопрос как сформировать правильно tcp пакет, чтобы выставить фильтр и ничего левого не попадало
a.n.o.n.i.m вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Есть эмулятор сервера ПК, нужно расшарить Artem 75 Фриланс 2 21.01.2015 20:35
Расшарить диски на удаленном рабочем столе _ZixeL_ Общие вопросы Delphi 0 13.11.2012 10:36
Как расшарить Wi-Fi yuta_86 Windows 0 09.11.2012 21:56
Расшарить интернет IVolution Операционные системы общие вопросы 5 26.11.2010 10:10
Краткий смысл. В чем цель и смысл вашей жизни? grenles Свободное общение 20 13.09.2010 07:13