Консольный torrent клиент windows

Ровно месяц назад была опубликована статья LiveDC — Быстрый доступ к p2p файлам. Смысл ее в том, что Erty_Hackward написал DC-клиент с возможностью просмотра файлов до их окончательной загрузки. С его помощью можно, например, смотреть фильмы спустя пару минут после начала закачки, перематывать их, смотреть с любого момента. А можно извлечь нужный файл из большого архива, не перекачивая целый архив.

Мне очень понравилась идея этой программы. Но она написана на C#. А хотелось бы использовать ее в линуксе. Поэтому с разрешения автора я с большим удовольствием взялся за создание аналогичной программы для линукса. В результате получился консольный битторрент клиент QLiveBittorrent.

Как оно работает

Расскажу о работе QLiveBittorrent на примере скачивания фильма. Ну, например, мой друг выложил в сеть видеозапись выпускного вечера, недавно прошедшего в нашей школе, а я хочу ее скачать, и еще раз насладиться этим незабываемым зрелищем.

Я начинаю скачивать фильм. Указываю папку, куда его надо подмонтировать. И тут же пытаюсь его открыть. Фильм открывается 1-2 мин — в зависимости от скорости. Начинаю смотреть — лагов, как правило, нет, если скорости хватает. Далее я перематываю фильм на середину. Наблюдаю тормоза ~30 сек, и продолжаю смотреть его с середины.

Происходит примерно следующее. Изначально, в момент открытия фильма в плеере, программа скачивает первые несколько блоков фильма и последний блок, чтоб получить информацию о его продолжительности. Далее она продолжает скачивать фильм с начала. Но в момент перемотки фильма на середину, программа начинает скачивать именно тот блок, который был запрошен плеером.

Кроме скачивания фильмов, программу можно использовать для работы с архивами, iso-образами, для просмотра папок с огромным числом картинок. Это очень удобно — начать качать архив, и с самого начала, не дожидаясь пока он скачается, открыть его, сразу указать, какой файл тебе нужен, и скачать именно его.

Как оно начиналось

После того, как я осознал, что будет проще написать свое, чем пытаться портировать LiveDC на линукс, я сразу же приступил к разработке.

Сначала я думал встроить свой функционал в мой любимый bittorrent клиент. Но после просмотра исходников это желание отпало. Миллионы файлов, везде defin-ы на разные системы, все это в виде простыни, и ничего не понятно. Однако, под впечатлением от qbittorrent, я выбрал тот же инструментарий.

  1. Qt5
  2. libtorrent-rasterbar
  3. FUSE

За день был написан драйвер файловой системы qlive.
Еще за день — графика и скачивание торрентов.
Выглядело это примерно так:

На этом разработка впала в ступор. Программа работала, докачивала необходимые куски, но регулярно получала SIGSEGV (ошибка «программа обратилась не по адресу»). В это же время я грустно смотрел на функционал qbittorrent и utorrent, и до меня медленно доходило, что энтузиазма на месяцы разработки у меня не хватит…

Второе дыхание

Второе дыхание открылось, когда я решил забить на GUI. Кому он нужен? На его поддержку уходит слишком много нервов! Так появился консольный битторрент клиент. А затем появилась интересная идея разделить сидирующие торренты от качающихся.

В результате программа оказалась разделенной на качающую часть, которая умеет монтировать недокачанные файлы, ограничивать скорость скачивания и быть обычным торрент-клиентом и сидирующую часть (seed-manager), которая умеет раздавать то, что скачано, а также ограничивать скорость отдачи.

Интересные моменты разработки

  1. Иногда, тестируя закачку торрентов, я с удивлением обнаруживал, что скорость скачивания превосходит максимальную скорость моего роутера — 802.11G ~2MБ/с. Она достигала 40-50 МБ/с, что было в принципе невозможно! Я пытался валить все на кеши. Однако, выяснилось, что у меня было запущено 2 клиента на компьютере, которые и обменивались между собой информацией на скорости чтения жесткого диска. Один читает, другой пишет. Впоследствии я использовал это для тестирования.
  2. Из-за того, что клиент консольный, мне пришлось разбираться с сигналами завершения. Я добавил обработку сигнала SIGTERM (сигнал для запроса завершения процесса). Во время дебага, когда я посылал SIGTERM «руками», он успешно перехватывался и обрабатывался. Однако, на практике, когда я в терминале жал ctrl-c, сигнал не обрабатывался. Оказалось, что терминал посылает не SIGTERM, а SIGINT (сигнал для остановки процесса пользователем с терминала). Это меня поразило. Оказывается, при нажатии ctrl-c идет сигнал не «останови процесс», а «пользователь хочет, чтоб процесс остановился». Наверное, можно придумать глубокий смысл разницы этих процессов, но это было довольно неожиданно и странно.
  3. Несмотря на то, что клиент консольный, мне хотелось, чтобы какое-то подобие GUI все же оставалось. Но ведь, если приложение консольное, то хочется, чтобы оно запускалось в голой консоли (TTY), а это невозможно при наличии GUI… Или возможно? Для этого надо понимать, как работает графика в линуксе.

    А работает она примерно так: есть X-server, есть клиенты. В какой-то момент клиент подключается. Вопрос — когда это происходит? Экспериментальным путем (методом пристального взгляда) я выяснил, что подключение происходит в момент создания QApplication. Соответственно, если нужна графика, то я создаю QApplication, если нет — QCoreApplication. Таким образом, программа может запускаться как в голой консоли, так и с графическим мини-интерефейсом.

  4. Смешивание Qt и libtorrent — это чистый ад. Мои нервы в конце концов не выдержали, и я начал пытаться переводить все в Qt. К сожалению, libtorrent использует std, поэтому весь мой код увешан QString::fromStdString(string) и QString.toStdString(), а так же конверсиями vector char, QVector char, QByteArray и т.п.
  5. Во время разработки я столкнулся с неприятной проблемой. В один прекрасный момент к программе подключаются медленные пиры и начинают неторопливо отдавать нужные куски. При этом в среднем скорость закачки хорошая, но задержки из-за них недопустимые. Я пытался с этим бороться. В какой-то степени задачу удалось решить за счет того, что первые 2 минуты программа ищет быстрых пиров, а затем ограничивает их максимальное число пятью пирами. Это позволяет отшивать большинство медленных пиров.
  6. Для того, чтобы после полуночи не было проблем с вычитанием времени, в программе реализована функция midnight(), которая каждую секунду проверяет, не полночь ли сейчас? В течение 5 секунд после полуночи программу колбасит — она при обновлении информации на экране обнуляет все временные счетчики, игнорируя запросы пользователя. Такой вот редкостный костыль. Я его за 3 минуты до полуночи написал.

Список фич

  1. Если торрент опубликовали только что, то отношение количества сидеров к личерам слишком маленькое. Это влечет за собой почти полную невозможность скачать такой торрент за разумное время. Поэтому в QLiveBittorrent добавлена возможность «превращения» в обычного торрент-клиента. Для этого надо нажать клавишу ‘a’ (английскую).
  2. При чтении подмонтированных файлов программы впадают в ступор, пока необходимые куски не будут скачаны. Но они обязательно из него выходят, когда это происходит. Это особенность программы.
  3. Авторитетные источники утверждают, что на канале 600КБ/с фильм весом 1.45G с внешней звуковой дорожкой и субтитрами проигрывается без лагов.
  4. Если нажать на клавиатуре ctrl-c (или послать SIGTERM), то программа начнет завершаться — сбрасывать данные на жесткий диск и отправлять информацию трекерам. После сброса данных можно нажать ctrl-c — тогда информация не будет послана трекерам. Это сделано, потому что меня очень расстраивают программы, которые невозможно завершить.

Источники

  1. Erty_Hackward — оригинальная идея
  2. ximaera — рассказал про то, как надо парсить параметры из командной строки.
  3. статья про boost::program_options
  4. Libtorrent api — хорошая библиотека, но эмоции от одностраничной документации непередаваемы.
  5. github.com/qbittorrent/qBittorrent — читал исходники, но ничего не понял.

Скачивание

Исходники
ArchLinux (AUR)
linux-x86-64

Для работы требуются библиотеки boost, Qt, libtorrent-rasterbar.
Настройки хранятся по адресу ~/.qlivebittorrent

UPD 00:30
Забыл описать еще две фичи:

  1. После загрузки торрента, он автоматически добавляется в список сидирования. Если seed-manager уже запущен, то он добавится в список в течение 10 минут.
  2. Если торрент был удален, то он будет удален из списка сидирования при первом же запросе.

UPD 18:00
DAP-DarkneSS выложил версию под OpenSUSE. Спасибо.
Версия под OpenSUSE

UPD 23:15
В выложенной версии не работало GUI. В чем ошибка я так и не понял, но требуемый костыль найден.
Файлы перезалиты.

UPD +месяц
DAP-DarkneSS выложил версии под Debian, Ubuntu и Fedora. Спасибо.
Debian и Ubuntu
Fedora

WebTorrent CLI

The streaming torrent client. For the command line.

WebTorrent is the first BitTorrent client that works in the browser, but webtorrent-cli,
i.e. THIS PACKAGE, is for using WebTorrent from the command line.

webtorrent-cli is a simple torrent client for use in node.js, as a command line app. It
uses TCP, UDP and WebRTC to talk to other torrent clients.

To use WebTorrent in the browser, see webtorrent.

Features

  • Use WebTorrent from the command line!
  • Insanely fast
  • Streaming
    • Stream to AirPlay, Chromecast, VLC player, IINA, and many other devices/players
    • Fetches pieces from the network on-demand so seeking is supported (even before torrent is finished)
    • Seamlessly switches between sequential and rarest-first piece selection strategy
  • Supports advanced torrent client features
    • magnet uri support via ut_metadata
    • peer discovery via dht,
      tracker, and
      ut_pex
    • protocol extension api
      for adding new extensions
    • Check all the supported BEPs here

Install

To install a webtorrent command line program, run:

npm install webtorrent-cli -g

Usage

$ webtorrent --help
               _     _                            _
 __      _____| |__ | |_ ___  _ __ _ __ ___ _ __ | |_
 \ \ /\ / / _ \ '_ \| __/ _ \| '__| '__/ _ \ '_ \| __|
  \ V  V /  __/ |_) | || (_) | |  | | |  __/ | | | |_
   \_/\_/ \___|_.__/ \__\___/|_|  |_|  \___|_| |_|\__|

Usage:
  webtorrent [command] <torrent-id> [options]

Examples:
  webtorrent download "magnet:..." --vlc
  webtorrent "magnet:..." --vlc --player-args="--video-on-top --repeat"

Default output location:
  * when streaming: Temp folder
  * when downloading: Current directory

Specify <torrent-id> as one of:
  * magnet uri
  * http url to .torrent file
  * filesystem path to .torrent file
  * info hash (hex string)

Commands:
  webtorrent download [torrent-ids...]      Download a torrent                             [default]
  webtorrent downloadmeta <torrent-ids...>  Download metadata of torrent
  webtorrent seed <inputs...>               Seed a file or a folder
  webtorrent create <input>                 Create a .torrent file
  webtorrent info <torrent-id>              Show torrent information
  webtorrent version                        Show version information
  webtorrent help                           Show help information

Options (streaming):
      --airplay     Apple TV                                                               [boolean]
      --chromecast  Google Chromecast                                                 [default: all]
      --dlna        DLNA                                                                   [boolean]
      --mplayer     MPlayer                                                                [boolean]
      --mpv         MPV                                                                    [boolean]
      --omx         OMX                                                              [default: hdmi]
      --vlc         VLC                                                                    [boolean]
      --iina        IINA                                                                   [boolean]
      --smplayer    SMPlayer                                                               [boolean]
      --xbmc        XBMC                                                                   [boolean]
      --stdout      Standard out (implies --quiet)                                         [boolean]

Options (simple):
  -o, --out                 Set download destination                                        [string]
  -s, --select              Select specific file in torrent                    [default: List files]
  -i, --interactive-select  Interactively select specific file in torrent                  [boolean]
  -t, --subtitles           Load subtitles file                                             [string]
  -h, --help                Show help information                                          [boolean]
  -v, --version             Show version information                                       [boolean]

Options (advanced)
  -p, --port            Change the http server port                         [number] [default: 8000]
  -b, --blocklist       Load blocklist file/url                                             [string]
  -a, --announce        Tracker URL to announce to                                          [string]
  -q, --quiet           Don't show UI on stdout                                            [boolean]
  -d, --download-limit  Maximum download speed in kb/s                 [number] [default: unlimited]
  -u, --upload-limit    Maximum upload speed in kb/s                   [number] [default: unlimited]
      --pip             Enter Picture-in-Picture if supported by the player                [boolean]
      --verbose         Show torrent protocol details                                      [boolean]
      --playlist        Open files in a playlist if supported by the player                [boolean]
      --player-args     Add player specific arguments (see example)                         [string]
      --torrent-port    Change the torrent seeding port                   [number] [default: random]
      --dht-port        Change the dht port                               [number] [default: random]
      --not-on-top      Don't set "always on top" option in player                         [boolean]
      --keep-seeding    Don't quit when done downloading                                   [boolean]
      --no-quit         Don't quit when player exits                                       [boolean]
      --on-done         Run script after torrent download is done                           [string]
      --on-exit         Run script before program exit                                      [string]

To download a torrent:

To stream a torrent to a device like AirPlay or Chromecast, just pass a flag:

$ webtorrent magnet_uri --airplay

In addition to magnet uris, webtorrent supports many ways to specify a torrent:

  • magnet uri (string)
  • torrent file (buffer)
  • info hash (hex string or buffer)
  • parsed torrent (from parse-torrent)
  • http/https url to a torrent file (string)
  • filesystem path to a torrent file (string)

License

MIT. Copyright (c) Feross Aboukhadijeh and WebTorrent, LLC.

µTorrent Server - BitTorrent-клиент

µTorrent Server - BitTorrent-клиент

01.09.2010 года разработчики популярного BitTorrent-клиента для Windows, по просьбам пользователей, выпустили первую альфа версию µTorrent Server 3.0 для GNU/Linux.

µTorrent Server - BitTorrent-клиент

µTorrent Server - BitTorrent-клиент

µTorrent Server — это консольный BitTorrent-клиент пока поставляемый в виде сервера и на данный момент не имеет своего пользовательского интерфейса (GUI).

µTorrent Server - BitTorrent-клиент

µTorrent Server - BitTorrent-клиент

µTorrent Server управляеся через Web-интерфейс (версия с графическим интерфейсом появится позже), для доступа к приложению можно использовать любой современный web-браузер.

µTorrent Server - BitTorrent-клиент

µTorrent Server - BitTorrent-клиент

Для использования µTorrent, с сайта проекта необходимо скачать архив, распаковать его и запустить «utserver«.

µTorrent Server - BitTorrent-клиент

µTorrent Server - BitTorrent-клиент

После запуска сервера, открыть любой браузер и перейти по адресу:

http://localhost:8080/gui/
Логин для входа: admin
Пароль: "Пустое поле"

В настройках логин/пароль можно изменить.

µTorrent Server - BitTorrent-клиент

µTorrent Server - BitTorrent-клиент

Конфигурация µTorrent Server находится в файле utserver.conf директории сервера (его «по умолчанию» нет). Он имеет примерно такое содержание:

ut_webui_port 8080
dir_active /home/user/
dir_torrent_files /home/user/torrent
bind_port 37455

Более подробно о нём можно узнать в uTorrent_Server.html или uTorrent_Server.pdf находящихся в каталоге «docs«.

µTorrent Server - BitTorrent-клиент

µTorrent Server alpha 3.0 основан на кодовой базе оригинального Win-клиента версии 3.0.

µTorrent Server - BitTorrent-клиент

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

µTorrent Server - BitTorrent-клиент

µTorrent Server - BitTorrent-клиент

Авторами отмечается что µTorrent Server работоспособен и на других дистрибутивах с Linux-ядром версии 2.6.13 и выше, но они официально не поддерживаются.

µTorrent Server - BitTorrent-клиент

µTorrent распространяется бесплатно, но его исходный код закрыт.

µTorrent Server - BitTorrent-клиент

Домашняя страница

µTorrent Linux (Forum)

Опишу здесь, что бы не забыть, как запустить консольного клиента rtorrent с удаленной консоли, что бы потом можно было в любой момент зайти и посмотреть — что там делается.
Документация по rtorrent лежит тут
Часть информации взята тут

Для того, что бы не вводить в командной строке параметры запуска rtorrent, создаем файл .rtorrent.rc в домашней директории. Вот пример содержания моего файла

# Это пример файла ресурсов для rTorrent. Скопируйте его в
# ~/.rtorrent.rc и разрешите/измените опции, как вам будет нужно.

# Максимальное и минимальное количество пиров при соединении через torrent.
max_peers = 400
#min_peers = 40

# Тоже что и выше, только для seed выкаченных torrents (-1 = same as downloading)
#min_peers_seed = 10
#max_peers_seed = 50

# Максимальное количество одновременных закачек per torrent.
#max_uploads = 15

# Глобальная скорость закачки и отдачи в KiB. "0" - без ограничений.
download_rate = 250
upload_rate = 200

# Директория по умолчанию для сохранения закачиваемых торентов.
directory = ~/torrent/download/

# каталог куда будет сохраняться состояние торентов. Здесь, в этом примере, 
# они сохраняются в папку session
session = ~/torrent/session

# Каждый день сработает тригер "throttle_1" в 18:00 и установит скорость
# скорость закачки в 450kb, а тригер "throttle_2" установит ее в 250kb 
# в 08:00. Используя это клиент может автоматически регулировать скорость закачки.
schedule = throttle_1,18:00:00,24:00:00,download_rate=450
schedule = throttle_2,08:00:00,24:00:00,download_rate=250 

# rtorrent каждые 5 секунд проверяет этот каталог на новые *.torrent 
# файлы и если они есть то ставит их на закачку
schedule = watch_directory,5,5,load_start=~/torrent/*.torrent

# номер порта (или нескольких портов) который открывает клиент для 
# обмена данными
port_range = 6900-6900

# случайный выбор порта для обмена данными. В данном случае он отключен
port_random = no

# проверять хэш торрента после закачки
check_hash = yes
# C версии rtorrent 0.8.7 были заменены некоторые опции
# max_open_sockets ⇒ network.max_open_sockets 
# max_open_files ⇒ network.max_open_files 
# umask ⇒ system.umask.set 
# d.save_session ⇒ d.save_full_session
system.umask.set = 022
# Из-за ошибки в ядре системы, нужно добавить следующую строку (версии 0.8.7, 0.8.8)
session.name.set = "$cat=$system.hostname=,:,$system.pid="
# Следующая строка удалена из опций - закоментируйте ее
#session_on_completion = yes
session_save = yes
#working_directory = ~/torrent/
max_uploads = 100

Вот пример файла из документации | ссылка
Для работы этого клиента, нужно открыть tcp порт 6900 на фаерволе. Тк места в домашней директории не хватало, то закачки будут сохраняться в /var/ftp/torrent/

Внешний вид

В левом нижнем углу написано [Throttle off/off KB]. Это лимиты на
Upload (отдачу) и Download (закачку) соответственно. По умолчанию они выключены.
Их можно изменить кнопками
a/z, s/x, d/c для изменения лимита отдачи вверх/вниз по 1, 5 и 50 кб/с
соответственно, и те же буквы при нажатом
Shift или CapsLock для изменения лимита закачки.

Рассмотрим сам торрент. Сначала идет название, далее написано Rate и
указаны текущие скорости отдачи и скачивания. После этого сколько было отдано с данного торрента. В квадратных скобках идет рейтинг (являющийся соотношением скачанного/отданного.
Если есть слово Inactive означает, что торрент неактивен (на паузе).

В верхней строке написано View: main. Всего их 7:
переключаемых кнопками 1-7:

  1. Main — по умолчанию.
  2. Name — показ торрентов с сортировкой по имени.
  3. Started — показ только запущенных торрентов.
  4. Stopped — показ только остановленных торрентов.
  5. Complete — показ только закачанных на 100% торрентов.
  6. Incomplete — показ только недокачанных торрентов.
  7. Hashing — показ только хешируемых торрентов.

В клиенте используется навигация в стиле Lynx. Так называют способ организации
интерфейса, при котором передвижение осуществляется стрелками по правилу:
вверх/вниз — в пределах текущего уровня, влево/вправо — на уровень выше и на
уровень ниже.

Для примера можно выбрать какую-либо из раздач и нажать стрелку
вправо. Мы увидим вот такое меню.

  • Peer list — список пиров
  • Info — информация о торренте
  • File list — список файлов в закачиваемом торренте
  • Tracker list — список трекеров
  • Chunks seen — просмотреть
  • Transfer list — список передаваемых кусков

Выберем стрелками пункт File list и нажмём стрелку вправо. Теперь, выбрав нужный файл, можно с помощью пробела поставить ему высокий приоритет (hig) или вообще отказаться от его закачки (off).

Использование

  • Ctrl+ q — отключает программу, повторное нажатие закрывает программу не посылая трэкеру стоп сигнал
  • кнопки вниз/вверх — выбор торрента/адреса
  • кнопка <- — возвращает на предыдущий экран
  • кнопка -> — просмотр состояния загрузки/аплоуда торрента
  • a | s | d — увеличть скорость слота аплоуда на 1/5/50 кб.
  • A | S | D — увеличть скорость слота загрузки на 1/5/50 кб.
  • z | x | c — уменьшить скорость аплоуда на 1/5/50 кб.
  • Z | X | C — уменьшить скорость загрузки на 1/5/50 кб.
  • 1…8 — переключение вида на различные окна
  • Ctrl+S — начать закачку
  • Ctrl+D — остановить закачку (повторное нажатие удаляет торент закачку. Сам торрент файл сохраняется)
  • Ctrl+K — закрыть торент и его файлы
  • Ctrl+R — проверить хэш торрента
  • Ctrl+O — изменить директорию на загрузку, торрент должен быть закрыт.
  • + | — — увеличить уменьшить приоритет загрузки торрента
  • backspace добавить URL или путь к торренту
  • l просмотреть лог, чтобы выйти нужно нажать пробел
  • Ctrl+P — вызвать комманду или поменять настройку

Запуск и управление программы rtorrent

Входим в удаленную консоль и набираем

~]$screen -
~]$rtorrent [url.torrent]

Далее для выхода ^a + d
Для управления в этом режиме используем

  1. ^a + q -для выхода из програмы
  2. ^a + s -для запуска закачки. И тд
  3. ^a +d — для выхода из консоли, не закрывая программы

Далее закрываем консоль и идем спать.
Если нам надо проверить закачку.

  1. Входим на удаленную консоль
  2. Набираем
$screen -r

И попадаем на экран управления rtorrent.

Deluge
для Windows

Deluge — полнофункциональный кросс-платформенный клиент BitTorrent, выпущенный под лицензией GNU GPLv3 +, и в соответствии со стандартами freedesktop, позволяющими работать во многих средах. Активно использует библиотеку libtorrent.

Клиент содержит общие функции для клиентов BitTorrent, таких как шифрование протоколов, DHT, локальное одноранговое обнаружение (LSD), одноранговый обмен (PEX), UPnP, NAT-PMP, поддержка прокси, ограничение скорости потокового трафика.

Программа может быть запущена как обычное автономное настольное приложение, так и в качестве клиент-сервера. В режиме Thin client приложение может работать с пользовательскими интерфейсами, удаленно подключаемыми с любой другой платформы. Существует три основных пользовательских интерфейса (UI):

  • Пользовательский интерфейс GTK для рабочего стола.
  • Веб-интерфейс для браузера.
  • Консольный интерфейс командной строки.

Доступна богатая коллекция плагинов, благодаря которой можно существенно расширить функциональность приложения.

ТОП-сегодня раздела «Торрент клиенты, файловый обмен»

qBittorrent 4.4.5 / 5.0.5

QBittorrent — простой в использовании клиент файлообменной P2P-сети BitTorrent, который предлагает…

uTorrent Web 1.3.0

Удобный инструмент от разработчиков популярного торрент-клиента uTorrent с поддержкой…

MediaGet 3.01.4212

MediaGet — популярная программа для поиска и скачивания любых фильмов, музыки, программ, игр и…

Shareman 102.3.78.235

Shareman — бесплатная и удобная в использовании программа, которая сочетает в себе мощный…

Отзывы о программе Deluge

Max про Deluge 1.3.15 [08-07-2021]

Юзаю BitComet лет 10, всем доволен, а это … оставлю для экспериментов на Win7 и Ubuntu.
Из описания не ясно чем это лучше/хуже других.
11 | 9 | Ответить

Игорь про Deluge 1.3.15 [21-11-2020]

Не работает с Windows XP, минимум семерка!
10 | 15 | Ответить

Андрей Серов про Deluge 1.3.15 [02-07-2017]

Прекрасная стабильная программа, сам пользуюсь и советую другим тоже.
14 | 11 | Ответить

Понравилась статья? Поделить с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
  • Machine check exception windows 10 при работе
  • Как вернуть языковую панель в windows xp в нижнюю панель
  • Как удалить азербайджанский язык из языковой панели windows 10
  • Чем отличается файловая система windows от linux
  • Что такое сетевое обнаружение в windows 10