Skip to content

Простой симулятор передачи пакетов в локальной сети

Notifications You must be signed in to change notification settings

SatelliteCat/NetworkSimulator

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

22 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

NetworkSimulator

Простой симулятор передачи пакетов в локальной сети

Моделирует передачу в локальной сети между устройствами и отображает путь пакета. Создан в рамках курсового проекта по курсу Сети ЭВМ и телекоммуникации

Значок ютубаПосмотреть на YouTube

Скриншот

Возможности:

  • Создание сети из ПК, хабов, роуетров
  • Отправка пакета с ПК на произвольный IP
  • Отображение маршрута всех пакетов
  • Роутеры с поддержкой статической маршрутизации и PROXY-таблицы
  • Визуальное отображение схемы сети
  • Анимация передачи пакетов

Реализация

Основа симулятора выполнена в виде велосипедов, скрепленных синей изолентой с костылями в виде библиотеки, содержащей компоненты Windows Forms.

Список компонентов:

PC Рабочая станиця. Имеет один интерфейс. Может послыать пакеты на другие узлы сети
Hub Неуправляемый хаб. Рассылает пакеты на все порты, кромп того, с которого он пришел.Имеет произвольное число интерфейсов.
Server Роуетр. Осуществляет маршрутизацию. Имеет произвольное число интерфейсов
PCGroup Группа ПК. Автоматически создает много ПК с IP в заданном диапазоне
Gate Шлюз в интернет. Не реализован адекватно. Работает как ПК, не умеющий отправлять пакет.

Все они должны располагаться на NetDrawer, который отвечает за отрисовку связей между ними и анимацию пакетов.

Краткая документация

Настройка и подготовка костылей

Ниже приведен пример необходимых предварительных настроек

Logger.TextWrited += Logger_TextWrited;
PackageManager.NewPackage += PackageManager_NewPackage;
AbstractNetworkDevice.SendingDrawDelay = 1000;            //Время анимации отправки пакета
AbstractNetworkDevice.Drawer = netDrawer1;                //Указание объекта, использующегося для анимации пакетов

Logger - отвечает за логгирование прохождения пакетов при помощи событий и в отладочную консоль. PackageManager - хранит все существующие пакеты в системе, информаирует об изменении их состояния и добавлении новых.

Далее необходимо сконфигурировать сеть. После этого необходимо завершить настройку.

netDrawer1.Init();
netDrawer1.UpdateConnections();

Для анимации пакетов необходимо таймеров вызывать метод NetDrawer.UpdatePackages(uint interval)

Конфигруация сети

Компоненты можно расположить в конструкторе форм или создать программно. После этого их надо настроиь и соединить:

Настройка

PC

Необходимо задать IP и маску подсети. Опционально - задать основной шлюз

admin.SetIP("197.253.67.10/24");
admin.SetGateway("197.253.67.1");
Hub

Просто указать количество портов свойством InterfacesCount_U (можно в конструкторе)

Server

Указать список IP и масок интерфейсов, задать таблицу маршрутизации и PROXY-таблицу. Количество интерфейсов - это params, сколько IP перечислите - столько интерфейсов и будет создано

server1.SetIP("197.253.85.2/24", "197.253.91.2/24");
server1.SetRoute(
      @"197.253.67.0;255.255.255.0;197.253.91.1;1
        197.253.85.0;255.255.255.0;-;0");
server1.SetProxy(
      @"197.253.85.3-197.253.85.4;any;pass
        197.253.85.130-197.253.85.131;any;deny
        197.253.67.10;any;pass");
PCGroup

Указывается начальный и конечный IP-адреса диапазона, маска и основной шлюз

pcGroup1.SetPCs("197.253.85.3", "197.253.85.4", "255.255.255.128", "197.253.85.2");

Соединения

Для соединения устройств необходимо установить соответстве между портами.

/// <summary>
/// Подключает другое устройство к этому устройству
/// </summary>
/// <param name="port_number">Номер порта, к которому подключается</param>
/// <param name="device">Подключаемое устройство</param>
/// <returns></returns>
public void Connect(int port_number, AbstractNetworkDevice device)

/// <summary>
/// Подключает другое устройство к этому устройству
/// </summary>
/// <param name="port_number">Номер порта, к которму подключается</param>
/// <param name="other_port_number">Номер порта на другом устройстве, которым оно полкючается</param>
/// <param name="device">Подключаемое устройство</param>
public void DuplexConnect(int port_number, int other_port_number, AbstractNetworkDevice device)

Connect устанавливает связь устройства с текущим, но не наоборот (такой вот косяк). Чтобы сделать нормальное двустороннее соединение используйте DuplexConnect

PCGroup соединяется путем указания начального порта. Например, если указан начальный порт 1, и подключается группа из 3х ПК, они займут порты 1,2,3.

Пример: Создание группы ПК, подключение ее к хабу, а хаба - к роутеру

pcGroup1.SetPCs("197.253.85.3", "197.253.85.4", "255.255.255.128", "197.253.85.2");
pcGroup1.Connect(hub1, 1);

server1.SetIP("197.253.85.2/24", "197.253.91.2/24");
server1.SetRoute(
      @"197.253.67.0;255.255.255.0;197.253.91.1;1
        197.253.85.0;255.255.255.0;-;0");
server1.SetProxy(
      @"197.253.85.3-197.253.85.4;any;pass
        197.253.67.10;any;pass");
        
hub1.DuplexConnect(0, 0, server1);

Do What The Fuck You Want To Public License

DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
                   Version 2, December 2004

Copyright (C) 2004 Sam Hocevar <sam@hocevar.net>

Everyone is permitted to copy and distribute verbatim or modified
copies of this license document, and changing it is allowed as long
as the name is changed.

           DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
  TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION

 0. You just DO WHAT THE FUCK YOU WANT TO.
Марков Алексей, 2016

About

Простой симулятор передачи пакетов в локальной сети

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C# 100.0%