{"id":22819852,"url":"https://github.com/aemarkov/networksimulator","last_synced_at":"2025-09-19T12:11:15.077Z","repository":{"id":86785989,"uuid":"60634234","full_name":"aemarkov/NetworkSimulator","owner":"aemarkov","description":"Простой симулятор передачи пакетов в локальной сети - семестровая работа к курсу \"Сетевое ПО\"","archived":false,"fork":false,"pushed_at":"2016-06-07T19:14:12.000Z","size":641,"stargazers_count":2,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-30T23:15:24.542Z","etag":null,"topics":["network","simulator","study-project"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/aemarkov.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2016-06-07T17:50:04.000Z","updated_at":"2023-03-03T21:24:24.000Z","dependencies_parsed_at":"2023-03-13T19:53:08.901Z","dependency_job_id":null,"html_url":"https://github.com/aemarkov/NetworkSimulator","commit_stats":null,"previous_names":["aemarkov/networksimulator"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/aemarkov/NetworkSimulator","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aemarkov%2FNetworkSimulator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aemarkov%2FNetworkSimulator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aemarkov%2FNetworkSimulator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aemarkov%2FNetworkSimulator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/aemarkov","download_url":"https://codeload.github.com/aemarkov/NetworkSimulator/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aemarkov%2FNetworkSimulator/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":275934852,"owners_count":25555523,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-19T02:00:09.700Z","response_time":108,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["network","simulator","study-project"],"created_at":"2024-12-12T15:14:33.918Z","updated_at":"2025-09-19T12:11:15.034Z","avatar_url":"https://github.com/aemarkov.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# NetworkSimulator\nПростой симулятор передачи пакетов в локальной сети\n\nМоделирует передачу в локальной сети между устройствами и отображает путь пакета. Создан в рамках курсового проекта по курсу `Сети ЭВМ и телекоммуникации`\n\n![Значок ютуба](http://findicons.com/files/icons/2155/social_media_bookmark/32/youtube.png)[Посмотреть на YouTube](https://www.youtube.com/watch?feature=player_embedded\u0026v=JW3ugIRKrgU)\n\n![Скриншот](https://github.com/Garrus007/NetworkSimulator/blob/master/screenshots/overview.jpg)\n\n## Возможности:\n  - Создание сети из ПК, хабов, роуетров\n  - Отправка пакета с ПК на произвольный IP\n  - Отображение маршрута всех пакетов\n  - Роутеры с поддержкой статической маршрутизации и PROXY-таблицы\n  - Визуальное отображение схемы сети\n  - Анимация передачи пакетов\n  \n## Реализация\nОснова симулятора выполнена ~~в виде велосипедов, скрепленных синей изолентой с костылями~~ в виде библиотеки, содержащей компоненты\nWindows Forms. \n\nСписок компонентов:\n\n| PC     | Рабочая станиця. Имеет один интерфейс. Может послыать пакеты на другие узлы сети       |\n|--------|----------------------------------------------------------------------------------------|\n|Hub     | Неуправляемый хаб. Рассылает пакеты на все порты, кромп того, с которого он пришел.Имеет произвольное число интерфейсов.|\n|Server  | Роуетр. Осуществляет маршрутизацию. Имеет произвольное число интерфейсов               |\n|PCGroup | Группа ПК. Автоматически создает много ПК с IP в заданном диапазоне                    |\n|Gate    | Шлюз в интернет. Не реализован адекватно. Работает как ПК, не умеющий отправлять пакет.|\n\nВсе они должны располагаться на NetDrawer, который отвечает за отрисовку связей между ними и анимацию пакетов.\n\n## Краткая документация\n### Настройка и подготовка костылей\n\nНиже приведен пример необходимых предварительных настроек\n```c#\nLogger.TextWrited += Logger_TextWrited;\nPackageManager.NewPackage += PackageManager_NewPackage;\nAbstractNetworkDevice.SendingDrawDelay = 1000;            //Время анимации отправки пакета\nAbstractNetworkDevice.Drawer = netDrawer1;                //Указание объекта, использующегося для анимации пакетов\n```\n\n`Logger` - отвечает за логгирование прохождения пакетов при помощи событий и в отладочную консоль.\n`PackageManager` - хранит все существующие пакеты в системе, информаирует об изменении их состояния и добавлении новых.\n\nДалее необходимо сконфигурировать сеть.\nПосле этого необходимо завершить настройку.\n\n```\nnetDrawer1.Init();\nnetDrawer1.UpdateConnections();\n```\n\nДля анимации пакетов необходимо таймеров вызывать метод `NetDrawer.UpdatePackages(uint interval)`\n\n### Конфигруация сети\nКомпоненты можно расположить в конструкторе форм или создать программно. После этого их надо настроиь и соединить:\n\n#### Настройка\n\n##### PC\nНеобходимо задать IP и маску подсети. Опционально - задать основной шлюз\n```C#\nadmin.SetIP(\"197.253.67.10/24\");\nadmin.SetGateway(\"197.253.67.1\");\n```\n\n##### Hub\nПросто указать количество портов свойством `InterfacesCount_U` (можно в конструкторе)\n\n##### Server\nУказать список IP и масок интерфейсов, задать таблицу маршрутизации и PROXY-таблицу. Количество интерфейсов - это `params`, сколько IP \nперечислите - столько интерфейсов и будет создано\n```C#\nserver1.SetIP(\"197.253.85.2/24\", \"197.253.91.2/24\");\nserver1.SetRoute(\n      @\"197.253.67.0;255.255.255.0;197.253.91.1;1\n        197.253.85.0;255.255.255.0;-;0\");\nserver1.SetProxy(\n      @\"197.253.85.3-197.253.85.4;any;pass\n        197.253.85.130-197.253.85.131;any;deny\n        197.253.67.10;any;pass\");\n```\n\n##### PCGroup\nУказывается начальный и конечный IP-адреса диапазона, маска и основной шлюз\n```C#\npcGroup1.SetPCs(\"197.253.85.3\", \"197.253.85.4\", \"255.255.255.128\", \"197.253.85.2\");\n```\n\n#### Соединения\nДля соединения устройств необходимо установить соответстве между портами. \n```C#\n/// \u003csummary\u003e\n/// Подключает другое устройство к этому устройству\n/// \u003c/summary\u003e\n/// \u003cparam name=\"port_number\"\u003eНомер порта, к которому подключается\u003c/param\u003e\n/// \u003cparam name=\"device\"\u003eПодключаемое устройство\u003c/param\u003e\n/// \u003creturns\u003e\u003c/returns\u003e\npublic void Connect(int port_number, AbstractNetworkDevice device)\n\n/// \u003csummary\u003e\n/// Подключает другое устройство к этому устройству\n/// \u003c/summary\u003e\n/// \u003cparam name=\"port_number\"\u003eНомер порта, к которму подключается\u003c/param\u003e\n/// \u003cparam name=\"other_port_number\"\u003eНомер порта на другом устройстве, которым оно полкючается\u003c/param\u003e\n/// \u003cparam name=\"device\"\u003eПодключаемое устройство\u003c/param\u003e\npublic void DuplexConnect(int port_number, int other_port_number, AbstractNetworkDevice device)\n```\n\n`Connect` устанавливает связь устройства с текущим, но не наоборот (такой вот косяк). Чтобы сделать нормальное двустороннее соединение\nиспользуйте `DuplexConnect`\n\nPCGroup соединяется путем указания начального порта. Например, если указан начальный порт 1, и подключается группа из 3х ПК, они займут\nпорты 1,2,3.\n\nПример:\nСоздание группы ПК, подключение ее к хабу, а хаба - к роутеру\n```C#\npcGroup1.SetPCs(\"197.253.85.3\", \"197.253.85.4\", \"255.255.255.128\", \"197.253.85.2\");\npcGroup1.Connect(hub1, 1);\n\nserver1.SetIP(\"197.253.85.2/24\", \"197.253.91.2/24\");\nserver1.SetRoute(\n      @\"197.253.67.0;255.255.255.0;197.253.91.1;1\n        197.253.85.0;255.255.255.0;-;0\");\nserver1.SetProxy(\n      @\"197.253.85.3-197.253.85.4;any;pass\n        197.253.67.10;any;pass\");\n        \nhub1.DuplexConnect(0, 0, server1);\n```\n\n## Do What The Fuck You Want To Public License ![](http://www.wtfpl.net/wp-content/uploads/2012/12/wtfpl-badge-2.png)\n```\nDO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE\n                   Version 2, December 2004\n\nCopyright (C) 2004 Sam Hocevar \u003csam@hocevar.net\u003e\n\nEveryone is permitted to copy and distribute verbatim or modified\ncopies of this license document, and changing it is allowed as long\nas the name is changed.\n\n           DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE\n  TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION\n\n 0. You just DO WHAT THE FUCK YOU WANT TO.\n```\n```\nМарков Алексей, 2016\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faemarkov%2Fnetworksimulator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faemarkov%2Fnetworksimulator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faemarkov%2Fnetworksimulator/lists"}