Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/aemarkov/networksimulator
Простой симулятор передачи пакетов в локальной сети - семестровая работа к курсу "Сетевое ПО"
https://github.com/aemarkov/networksimulator
network simulator study-project
Last synced: 15 days ago
JSON representation
Простой симулятор передачи пакетов в локальной сети - семестровая работа к курсу "Сетевое ПО"
- Host: GitHub
- URL: https://github.com/aemarkov/networksimulator
- Owner: aemarkov
- Created: 2016-06-07T17:50:04.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2016-06-07T19:14:12.000Z (over 8 years ago)
- Last Synced: 2024-04-28T06:23:32.252Z (8 months ago)
- Topics: network, simulator, study-project
- Language: C#
- Homepage:
- Size: 626 KB
- Stars: 2
- Watchers: 2
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# NetworkSimulator
Простой симулятор передачи пакетов в локальной сетиМоделирует передачу в локальной сети между устройствами и отображает путь пакета. Создан в рамках курсового проекта по курсу `Сети ЭВМ и телекоммуникации`
![Значок ютуба](http://findicons.com/files/icons/2155/social_media_bookmark/32/youtube.png)[Посмотреть на YouTube](https://www.youtube.com/watch?feature=player_embedded&v=JW3ugIRKrgU)
![Скриншот](https://github.com/Garrus007/NetworkSimulator/blob/master/screenshots/overview.jpg)
## Возможности:
- Создание сети из ПК, хабов, роуетров
- Отправка пакета с ПК на произвольный IP
- Отображение маршрута всех пакетов
- Роутеры с поддержкой статической маршрутизации и PROXY-таблицы
- Визуальное отображение схемы сети
- Анимация передачи пакетов
## Реализация
Основа симулятора выполнена ~~в виде велосипедов, скрепленных синей изолентой с костылями~~ в виде библиотеки, содержащей компоненты
Windows Forms.Список компонентов:
| PC | Рабочая станиця. Имеет один интерфейс. Может послыать пакеты на другие узлы сети |
|--------|----------------------------------------------------------------------------------------|
|Hub | Неуправляемый хаб. Рассылает пакеты на все порты, кромп того, с которого он пришел.Имеет произвольное число интерфейсов.|
|Server | Роуетр. Осуществляет маршрутизацию. Имеет произвольное число интерфейсов |
|PCGroup | Группа ПК. Автоматически создает много ПК с IP в заданном диапазоне |
|Gate | Шлюз в интернет. Не реализован адекватно. Работает как ПК, не умеющий отправлять пакет.|Все они должны располагаться на NetDrawer, который отвечает за отрисовку связей между ними и анимацию пакетов.
## Краткая документация
### Настройка и подготовка костылейНиже приведен пример необходимых предварительных настроек
```c#
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 и маску подсети. Опционально - задать основной шлюз
```C#
admin.SetIP("197.253.67.10/24");
admin.SetGateway("197.253.67.1");
```##### Hub
Просто указать количество портов свойством `InterfacesCount_U` (можно в конструкторе)##### Server
Указать список IP и масок интерфейсов, задать таблицу маршрутизации и PROXY-таблицу. Количество интерфейсов - это `params`, сколько IP
перечислите - столько интерфейсов и будет создано
```C#
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-адреса диапазона, маска и основной шлюз
```C#
pcGroup1.SetPCs("197.253.85.3", "197.253.85.4", "255.255.255.128", "197.253.85.2");
```#### Соединения
Для соединения устройств необходимо установить соответстве между портами.
```C#
///
/// Подключает другое устройство к этому устройству
///
/// Номер порта, к которому подключается
/// Подключаемое устройство
///
public void Connect(int port_number, AbstractNetworkDevice device)///
/// Подключает другое устройство к этому устройству
///
/// Номер порта, к которму подключается
/// Номер порта на другом устройстве, которым оно полкючается
/// Подключаемое устройство
public void DuplexConnect(int port_number, int other_port_number, AbstractNetworkDevice device)
````Connect` устанавливает связь устройства с текущим, но не наоборот (такой вот косяк). Чтобы сделать нормальное двустороннее соединение
используйте `DuplexConnect`PCGroup соединяется путем указания начального порта. Например, если указан начальный порт 1, и подключается группа из 3х ПК, они займут
порты 1,2,3.Пример:
Создание группы ПК, подключение ее к хабу, а хаба - к роутеру
```C#
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 ![](http://www.wtfpl.net/wp-content/uploads/2012/12/wtfpl-badge-2.png)
```
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
Version 2, December 2004Copyright (C) 2004 Sam Hocevar
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 MODIFICATION0. You just DO WHAT THE FUCK YOU WANT TO.
```
```
Марков Алексей, 2016
```