Как стать автором
Обновить

Комментарии 84

А почему хром оперой детектится?!
Такие сигнатуры у p0f. Сделаю нормальную, как вернусь домой.
НЛО прилетело и опубликовало эту надпись здесь
У вас не определился браузер. Какой у вас User-Agent?
НЛО прилетело и опубликовало эту надпись здесь
Не знает такого UA «Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:42.0) Gecko/20100101 Firefox/42.0»

И еще не определил Microsoft TMG HTTP/HTTPS прокси сервер.
OpenVPN Connect

First seen = 2015/07/24 20:24:22
Last update = 2015/07/24 20:26:31
Total flows = 5
Detected OS = Windows 7 or 8
HTTP software = Firefox 10.x or newer (ID seems legit)
MTU = 1308
Network link = ???
Language = Russian
Distance = 14

PTR test = Probably home user
Fingerprint and OS match. No proxy detected.
No OpenVPN detected.
Ваш VPN-сервис, вероятно, использует mssfix 1350, а не 1450.
Добавил определение настроек с mssfix 1400 и 1350.
Сижу за корпоративным прокси. Не распознал.

First seen = 2015/07/24 20:29:45
Last update = 2015/07/24 20:29:45
Total flows = 1
Detected OS = ???
HTTP software = ???
MTU = 1500
Network link = Ethernet or modem
Language = English
Distance = 13

PTR test = Probably home user
Fingerprint and OS match. No proxy detected.
No OpenVPN detected.
Когда я проектировал свой первый коммерческий vpn сервис, взял за привычку в openvpn клиентам ставить link-mtu 1200, чтоб не было проблем у пользователей за pppoe и прочими l2tp. Вот и сейчас мой openvpn не определился.
Слишком низкий MTU — не очень хорошо. У вас, например, будут проблемы с IPv6 внутри туннеля, т.к. по стандарту минимум 1280 должно быть.

Ну и такой MTU явно говорит о туннеле, таких низких значений не бывает в реальной жизни.
Мой личный vpn-сервер является так же моим личным ip6-брокером. И вся инфраструктура у меня давно уже на ип6, так что везде, где есть возможность, я подключаюсь по ип6 через свой vpn с mtu 1200. Проблем не было. Можно ссылку на кусок стандарта, их мне обещающий?

А то что у меня туннель значит то, что у меня билайн, инфолайн или любой из сотен других провайдеров, использующих pppoe или l2tp. Это если не смотреть на адрес точки выхода. Но если на него смотреть, то пользователя vpn проще спалить, сделав whois по его ипу.
www.ietf.org/rfc/rfc2460.txt
23 страница
параграф 5.
А то что у меня туннель значит то, что у меня билайн, инфолайн или любой из сотен других провайдеров, использующих pppoe или l2tp.
Ну не делают таких низких MTU, это подозрительно. У билайна в L2TP 1456, с PPPoE у вас будет, вероятно, 1492. А у вас получается где-то около 1155.

Проблем не было. Можно ссылку на кусок стандарта, их мне обещающий?
Ваша ОС отправляет, скорее всего, так называемые atomic fragments, т.е. фрагментированные пакеты с флагом, что фрагментированных пакетов больше не будет. Такие пакеты обрабатываются в отдельной очереди, независимо от «нормальных» пакетов.
tools.ietf.org/html/rfc6145#section-6
ssh2 тоннель

First seen = 2015/07/24 20:34:33
Last update = 2015/07/24 20:34:33
Total flows = 1
Detected OS = Linux 3.1-3.10
HTTP software = Firefox 10.x or newer (ID OS mismatch)
MTU = 1500
Network link = Ethernet or modem
Language = Russian
Distance = 12
Sys change = 2015/07/24 20:34:33
Uptime = 41 days 2 hrs 31 min (modulo 49 days)

PTR test = Probably home user
Fingerprint and User-Agent mismatch. Either proxy or User-Agent spoofing.
No OpenVPN detected.
Я так понял ваш форк на гитхабе отличается от оригинального p0f только тем что позволяет получать MTU через апи:
(что насколько я помню умел p0f v2 но еще не прикрутили к v3)
(upd:https://github.com/skord/p0f/blob/master/mtu.h)

# ./p0f-client /var/run/p0f.sock 192.168.128.1

First seen = 2015/07/24 20:31:44
Last update = 2015/07/24 20:31:44
Total flows = 1
Detected OS = Windows 7 or 8
HTTP software = Opera 15.x-18.x (ID is fake)
MTU = 1500
Network link = Ethernet or modem
Language = English
Distance = 0

а вот это только у вас на сайтике?:

PTR test = Probably home user
Fingerprint and OS match. No proxy detected.
No OpenVPN detected.
Да, в форке только добавлено запоминание MTU и его экспорт в API (mtu branch), и обновлены сигнатуры. PTR test и разъяснениями занимается скрипт.
Интересненько! Спасибо за статью!

Проверил несколько вариантов с Linux хоста через:
  1. прямое соединение — всё правильно
  2. ssh-туннель — говорит, что я без прокси (ну, исходя из предложения в статье, которое используется для детектирования прокси, не мудрено, так как хост и прокси оба на Linux)
  3. OpenVPN — таки определило меня
  4. OpenVPN + Squid на том конце — не поймало, тоже по понятным причинам

Итого — 1 из 3 (ну, или 2 из 4), но на Windows хосте, наверно всё-таки 3 из 3 было бы.
НЛО прилетело и опубликовало эту надпись здесь
VPN под прокси не определил, только прокси.
понравилась проверка времени в браузере против айпи. Как с этим бороться?
НЛО прилетело и опубликовало эту надпись здесь
Тут еще интереснее whoer.net/extended
Действительно, интереснее, как минимум WebRTC отдаёт инфу по локальным адресам (и сразу видно всякие VirtualBox, LXC, Docker и т.п., запущенные на ноуте). Топикстартеру добавить бы такую штуку в свой сервис.
Очевидно же: ставить на хосте тот же часовой пояс, что стоит у сервера.
Забавно, сижу просто из дома без каких либо прокси или тоннелей, а результат:

Вы используете средства анонимизации, однако нам не удалось узнать ваш реальный IP адрес.

Вероятность анонимизации:
99%

Ещё более забавно то, что перенаправив весь трафик хоста в домашней локалке через один из своих серверов за границей результат не изменился, изменился лишь отдектированный IP поменявшись с домашнего на адрес сервера.
P.S. забыл написать, что перенаправил трафик через OpenVPN.
Вы можете отключить mssfix, установив его в 0 и на сервере, и на клиентах. В этом случае, ваш MSS будет 1460 (в случае IPv4), что соответствует MTU 1500.

При этом, очевидно, получаем повышенный owerhead
Разумнее задать MSS немного меньше, причём это достаточно сделать на клиенте.
Короче, сидим на линухе через линуховый VPN ровно.
Сделайте API, полезный сервис будет!
Для детектирования прокси еще можно использовать разницу во временных зонах.
[Teach2BWitch]
Угадай автора по КПДВ… (Спасибо за пополнение коллекции качественными версиями!)
Пожалуй, текст лучше We can become more than you know… Рандомная идея — менять картинку в зависимости от результатов тестирования… Ну или добавлять элементы, прокси — портал, опенвпн — складка («портал» после снятия завесы), etc… [остановите меня, после пересмотра на английском я все никак не могу закончить бесконечно перечитывать все выпуски комиксов]


HTTP software = Opera 11.x-14.x (ID seems legit)#

14x?! Я конечно понимаю, что новая опера пошла с 15 версии вроде, но что за звери 13.x и 14.x?

PTR test = Probably server user
Не зря несколько лет назад попросил админов провайдера прописать себе PTR :)

Uptime = 1 days 11 hrs 29 min (modulo 497 days)
Это как вообще аптайм моего роутера определился, и что за 497 дней? Добавил IP в список маршрутов на OpenVPN, все равно аптайм роутера…
Uptime определяется так же, как у всех — по меткам в заголовках. А 497 дней — это примерно 2³² tick'ов (один tick в Linux'е по историческим причинам — это ⅟₁₀₀ секунды). Там счётчик переполняется :-)
Ну у меня вообще ничего из этого не определилось правильно.
А определит ли скрипт наличие socks прокси?
нет прокси? ооокей
First seen    = 2015/07/25 07:43:32
Last update   = 2015/07/25 07:43:32
Total flows   = 1
Detected OS   = Linux 3.x [generic]
HTTP software = ???
MTU           = 1500
Network link  = Ethernet or modem
Language      = ???
Distance      = 11
Sys change    = 2015/07/25 07:43:32
Uptime        = 81 days 4 hrs 52 min (modulo 198 days)
PTR           = de31.friproxy0.biz
PTR test      = Probably server user
Fingerprint and OS match. No proxy detected (this test does not include headers detection).
No OpenVPN detected.
В p0f сигнатуры для Chrome устаревшие, а ваш прокси еще и немного заголовки модифицирует. Добавил generic-сигнатуры, попробуйте еще раз.
изменений ноль, за исключением счетчиков времени.
вот сижу, пытаюсь понять зачем всё это мне…
Пользователям Хрома думаю знакомо расширение «ZenMate», выключив показывает следующее:

First seen = 2015/07/25 08:26:58
Last update = 2015/07/25 08:26:58
Total flows = 1
Detected OS = Linux 2.2.x-3.x [generic]
HTTP software = ???
MTU = 1500
Network link = Ethernet or modem
Language = Russian
Distance = 13
Uptime = 126 days 10 hrs 32 min (modulo 198 days)

PTR test = Probably home user
Fingerprint and OS match. No proxy detected (this test does not include headers detection).
No OpenVPN detected.
при отключенном прокси
WITCH?

First seen = 2015/07/25 09:51:16
Last update = 2015/07/25 09:51:16
Total flows = 4
Detected OS = Mac OS X [generic]
HTTP software = Chrome 27.x or newer (ID is fake)
MTU = 1400
Network link = Probably IPsec or other VPN
Language = Russian
Distance = 16
Uptime = 7 days 12 hrs 53 min (modulo 49 days)
PTR = xxx.yyy

PTR test = Probably server user
Your fingerprint is fake. This is probably a false positive.
No OpenVPN detected.
(у ДомРу можно реверс зону прописать через ЛК)

а через squid-proxy на digital ocean

First seen = 2015/07/25 09:48:45
Last update = 2015/07/25 09:55:22
Total flows = 2
Detected OS = Linux 3.x [generic]
HTTP software = ???
MTU = 1500
Network link = Ethernet or modem
Language = Russian
Distance = 11
Sys change = 2015/07/25 09:55:22
Uptime = 13 days 4 hrs 45 min (modulo 198 days)

PTR test = Probably home user
Fingerprint and OS match. No proxy detected (this test does not include headers detection).
No OpenVPN detected.
Я не думал, что так много людей пользуются Chrome. Попробуйте еще раз, или попробуйте с Firefox.
через squid прокси
WITCH?

First seen = 2015/07/25 13:48:43
Last update = 2015/07/25 13:48:43
Total flows = 1
Detected OS = Linux 3.x [generic]
HTTP software = ???
MTU = 1500
Network link = Ethernet or modem
Language = Russian
Distance = 12
Sys change = 2015/07/25 13:48:43
Uptime = 13 days 8 hrs 38 min (modulo 198 days)

PTR test = Probably home user
Fingerprint and OS match. No proxy detected (this test does not include headers detection).
No OpenVPN detected.

напрямую
WITCH?

First seen = 2015/07/25 13:49:59
Last update = 2015/07/25 13:49:59
Total flows = 3
Detected OS = Mac OS X [generic]
HTTP software = Chrome 27.x or newer (ID is fake)
MTU = 1400
Network link = Probably IPsec or other VPN
Language = Russian
Distance = 16
Uptime = 7 days 16 hrs 46 min (modulo 49 days)
PTR = xxx.yyy

PTR test = Probably server user
Your fingerprint is fake. This is probably a false positive.
No OpenVPN detected.

Firefox с proxy:

First seen = 2015/07/25 13:48:43
Last update = 2015/07/25 13:53:42
Total flows = 2
Detected OS = Linux 3.x [generic]
HTTP software = Firefox 10.x or newer (ID OS mismatch)
MTU = 1500
Network link = Ethernet or modem
Language = Russian
Distance = 12
Sys change = 2015/07/25 13:53:43
Uptime = 13 days 8 hrs 43 min (modulo 198 days)

PTR test = Probably home user
Fingerprint and User-Agent mismatch. Either proxy or User-Agent spoofing.
No OpenVPN detected.

Firefox без proxy:

First seen = 2015/07/25 13:49:59
Last update = 2015/07/25 13:54:09
Total flows = 6
Detected OS = Mac OS X [generic]
HTTP software = Firefox 10.x or newer (ID seems legit)
MTU = 1400
Network link = Probably IPsec or other VPN
Language = Russian
Distance = 16
Uptime = 9 days 15 hrs 3 min (modulo 62 days)
PTR = xxx.yyy

PTR test = Probably server user
Fingerprint and OS match. No proxy detected (this test does not include headers detection).
No OpenVPN detected.

Tor Browser
First seen = 2015/07/25 13:51:10
Last update = 2015/07/25 13:51:10
Total flows = 1
Detected OS = Linux 3.1-3.10
HTTP software = Firefox 10.x or newer (ID OS mismatch)
MTU = 1500
Network link = Ethernet or modem
Language = English
Distance = 11
Sys change = 2015/07/25 13:51:10
Uptime = 44 days 6 hrs 48 min (modulo 49 days)
PTR = 62-210-105-116.rev.poneytelecom.eu

PTR test = Probably home user
Fingerprint and User-Agent mismatch. Either proxy or User-Agent spoofing.
No OpenVPN detected.

Вы не думали что много людей пользуется самым популярным браузером??? А как он тогда стал самым популярным, если им никто не пользуется?
Я просто забыл про него, честно говоря. Тестировалось все на десктопном Firefox и мобильных браузерах.
Я что-то внезапно заболел и могу только спать, мне жутко неловко, но пока добавить нормальные сигнатуры не могу.
Спасибо за статью, много подчеркнул для себя.
Через Опен ВПН

First seen = 2015/07/25 11:23:39
Last update = 2015/07/25 11:23:39
Total flows = 4
Detected OS = Windows 7 or 8
HTTP software = Chrome 27.x or newer (ID is fake)
MTU = 1300
Network link = generic tunnel or VPN
Language = Russian
Distance = 12
PTR = ХХХ.ABC-ASD.com

PTR test = Probably server user
Your fingerprint is fake. This is probably a false positive.
No OpenVPN detected.
НЛО прилетело и опубликовало эту надпись здесь
Сижу за OpenVPN (аптайм неправильный, кстати?):

First seen = 2015/07/25 12:52:32
Last update = 2015/07/25 12:52:32
Total flows = 1
Detected OS = Mac OS X [generic]
HTTP software = ???
MTU = 1410
Network link = ???
Language = Russian
Distance = 12
Uptime = 17 days 19 hrs 28 min (modulo 49 days)
PTR = ***.ru

PTR test = Probably server user
Fingerprint and OS match. No proxy detected (this test does not include headers detection).
No OpenVPN detected.
У вас, наверное, какая-то старая версия OpenVPN? Я встречал расхождение на 2 значения для старых версий, но только однажды это видел.
openvpn --version
OpenVPN 2.2.1 x86_64-linux-gnu [SSL] [LZO2] [EPOLL] [PKCS11] [eurephia] [MH] [PF_INET6] [IPv6 payload 20110424-2 (2.2RC2)] built on Dec 1 2014
Есть рекомендации как обойти такой детект?
Устанавливать MSS, кратный 10, средствами iptables. 1400 или 1380, например. Либо вовсе его не исправлять, т.е. установить mssfix 0. Это вызовет излишнюю фрагментацию, зато у вас будет MTU 1500.
пробовал играть с MSS но ничего не получилось. Пробовал через iptables и через openvpn client-side settings. Гугление показало что MSS через iptables только для TCP — это так?
Да, верно, MSS это параметр заголовка TCP, но он изменяется (если вы про mssfix OpenVPN'а) и при UDP-подключении тоже. А что конкретно у вас не получается, значение вообще не меняется, или вы не можете конкретное установить?
Я имел в виду MSS в iptables, но цель — конечно же mssfix в ОpenVPN. Чтобы ваша детектилка меня так смачно не определяла :)

Когда задавал значение MSS в iptables, в детектилке значение не менялось. Когда добавлял mssfix в клиентсий openvpn конфиг, значение в детектилке менялось, но опознование всё равно было правильное.
У вас, вероятно, неправильное правило в iptables. Нужно что-то вроде такого:
iptables -t mangle -A FORWARD -i tun0 -p tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1361:1536 -j TCPMSS --set-mss 1360
mssfix должен быть установлен в 0 на клиенте и сервере. Если используете AES, например, то нужно уменьшить еще сильнее.
НЛО прилетело и опубликовало эту надпись здесь
еще как вариант использовать obfsproxy, но и его можно при очень большом желании обноружить.
Тогда использовать обычный stunnel. Правда тут уже возникает потеря скорости из-за дополнительного слоя шифрования.

Ну это помимо игр с MTU.
посмотрим что из этого выйдет
Включил свой рабочий VPN через IPSec:

First seen    = 2015/07/25 16:45:53
Last update   = 2015/07/25 16:45:53
Total flows   = 1
Detected OS   = Mac OS X  [generic]
HTTP software = ???
MTU           = 1500
Network link  = Ethernet or modem
Language      = English
Distance      = 17
Uptime        = 1 days 9 hrs 33 min (modulo 49 days)
PTR           = ...

PTR test      = Probably home user
Fingerprint and OS match. No proxy detected (this test does not include headers detection).
No OpenVPN detected


Я уж не знаю, как он работает, но ваша детектилка ничего не задетектила, хотя должна была бы :). Uptime, кстати, тоже неправильно определил.
Думаю, раз уж Вы заморочились сделать такой вредный сервис, то в статью не помешает добавить совет как что настроить чтобы осложнить для конечных сайтов определение использования пользователем proxy/vpn. Например, во что всё-же лучше выставлять mssfix чтобы это было наиболее похоже на обычных провайдеров (пусть даже мобильных) и менее вероятно детектилось как openvpn.
Там и так было написано, но не совсем уж прямо. Изменил текст, должно быть понятней.
В Android Chrome показывает то
Detected OS = Linux 3.1-3.10
HTTP software = Chrome 27.x or newer (ID is fake)
то
HTTP software = Android
Странно немного.
Есть описание, как работает p0f, или только исходники?
Проверьте еще раз, пожалуйста, не должно быть ID is fake.

В p0f есть список сигнатур для разных браузеров, где указан порядок заголовков, которые отправляет браузер, и какие-то специфичные для браузера вещи. Android — generic-сигнатура, которая только и делает, что ищет слово Android в User-Agent.
Соединение через OpenVPN c MacOS, браузер – Safari.

Но вообще все это странно: множество любителей посмотреть днем сериалы сидят внутри корпоративных сетей. Если обрубать их потому, что соединение идет через опосредованный сервер, индустрия развлечений может сильно пострадать.

First seen = 2015/07/26 14:25:54
Last update = 2015/07/26 14:25:54
Total flows = 1
Detected OS = Mac OS X [generic] [fuzzy]
HTTP software = ???
MTU = 1376
Network link = ???
Language = Armenian
Distance = 14
Uptime = 11 days 12 hrs 16 min (modulo 49 days)
PTR =…

PTR test = Probably server user
Fingerprint and OS match. No proxy detected (this test does not include headers detection).
No OpenVPN detected.
Это просто концепт, чтобы напомнить об MSS и показать, что он тоже имеет значение.
У вас стандартные настройки OpenVPN? Версия, может, старая (<2.3.1)?
SoftEther настроенный визардом по дефолту в л2тп+ипсек, открывал сафарей с макоси, получил это:

First seen = 2015/07/28 01:08:14
Last update = 2015/07/28 01:08:14
Total flows = 2
Detected OS = Linux 2.2.x-3.x [generic]
HTTP software = Chrome 27.x or newer (ID OS mismatch)
MTU = 1500
Network link = Ethernet or modem
Language = Russian
Distance = 10
Sys change = 2015/07/28 01:08:17
Uptime = 35 days 8 hrs 30 min (modulo 198 days) < — аптайм сервера с впн
PTR = localhost.local

PTR test = Probably server user
Fingerprint and User-Agent mismatch. Either proxy or User-Agent spoofing.
No OpenVPN detected.


Vpn не использую, но вот, что мне пишет:
MTU = 1390
Network link = OpenVPN TCP bs128 SHA1 lzo

Я так понимаю, что мой провайдер использует vpn канал до вышестоящего провайдера? Да еще и по tcp, а не по udp? Чем это чревато и что в данном случае мне можно предпринять? Это вообще нормально для провайдеров?
Еще немного непонятно по mtu, у меня на роутере на wan порту он установлен в 1500, а тут я вижу 1390. Нужно ли мне уменьшать mtu на роутере и если нет, то почему?
Такой MTU нормален, если у вас мобильный интернет или какая-либо нестандартная инкапсуляция.
Если у вас нет проблем с открытием сайтов и вы не блокируете ICMP, то и MTU на роутере менять не нужно, TCP сам определяет такие ситуации и подстраивается от них.
Нет, у меня не мобильный интернет, а самый настоящий оптоволоконный.
Просто мой провайдер очень маленький и вообще, честно говоря, вызывает у меня кучу вопросов в плане безопасности и правильности настроек, в частности куча открытых портов на ip, через который все пользователи получают доступ в интернет.
Проблем с открытием нет, ICMP не блокирует.
Просто хотелось бы понять, насколько такие настройки вообще нормальны для провайдера? В частности вот это OpenVPN TCP меня смутило. Значит ли это, что у провайдера поднят openvp туннель через TCP? Почему через tcp? Если сменить на udp, возможно ли снижение пингов у пользователей?
Это ничего не значит. Стоит читать это так: если вы используете OpenVPN, то, вероятнее всего, у вас OpenVPN с такими-то параметрами. А если не используете VPN, то игнорируйте эту строку.
В том то и дело, что я VPN не использую, хожу в интернеты напрямую (пока), а эту строчку мне пишет. Да, стоит отметить, что я сижу за натом и все пользователи моего провайдера имеют один единственный внешний ip. Стало быть это мой провайдер использует VPN соединение до вышестоящего провайдера?
Нет. Может значит, а может не значить. Наверняка сказать об этом только по MTU нельзя.
А вот этот параметр тогда на основе чего определяется? Не только же на основе MTU?
Network link = OpenVPN TCP bs128 SHA1 lzo

То есть, это нормально и ничего в связи с этим предпринимать не нужно?
Только на основе MTU.
Понял, спасибо. А от чего еще может быть такой низкий mtu? Это нормально для провайдера? Может ли это доставить каких то неудобств, вроде повышения пингов или чего-то подобного?
Лучше о причинах спросить у провайдера. У меня абсолютно нет идей, почему MTU именно такой. Это нестандартное значение.
Пинги у вас будут такими же, только вы не сможете принять и отправить большие пакеты.
только вы не сможете принять и отправить большие пакеты

А вот тут вот можно поподробнее? Как это может проявляться и какие из за этого могут возникнуть сложности?
Скорее всего, никаких, по крайней мере, с TCP точно проблем быть не должно, т.к. он рассчитан на работу с любым MTU и автоматически подстраивается под минимальный MTU на пути прохождения пакета, а с UDP и низкокачественными программами могут быть проблемы, т.к. там нужно обрабатывать проблемы с MTU программисту самостоятельно.

Обычно проблемы MTU проявляются так: веб-сайт начинает открываться или программа начинает загружать данные, но, после нескольких килобайт данных, прекращают, будто сервер ничего не посылает.
Если вы не видели проблем раньше, то их у вас и нет.
Да я подключил этого провайдера пару месяцев назад, до этого всю жизнь adsl пользовался.
С серфингом сайтов проблем нет, но оно понятно, тут tcp используется. Хочу вот vps себе купить и vpn там поднять, чтобы торренты через него завернуть, а openvpn через udp подключать предпочтительнее. Вот и думаю, где же мне ждать подвоха. Потому, что в случае с каким-нибудь Ростелекомом проблем бы точно не было, там сидят специалисты и настраивают все как положено, а тут малюсенький провайдер и подставу можно ждать откуда угодно, даже в силу отсутствия или недостаточной квалификации персонала.
Как это может проявляться и какие из за этого могут возникнуть сложности?
Небольшая задержка при открытии каждого сайта. Гораздо хуже — бывают сайты, которые в принципе не работают с пониженным MTU, но из-за обилия VPN'ов они, слава богу, стали экзотикой (это ошибка в конфигурации этих сайтов, по-умолчанию TCP/IP должен под максимальный доступный MTU подстраиваться автоматически).
Используйте HTTP.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

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

Истории