NNTP (Network News Transfer Protocol)
Последнее изменение этой страницы: 15:31, 18 июля 2016.
Уровень (по модели OSI): | Прикладной |
---|---|
Семейство: | TCP/IP, Usenet |
Порт/ID: | 119/TCP |
Назначение протокола: | Доступ к группам новостей |
Спецификация: | RFC 3977 |
Основные реализации (клиенты): | Outlook Express, Mozilla Thunderbird |
Основные реализации (серверы): | InterNetNews (INN) |
Вступил в силу с: | 1985 |
NNTP (англ. Network News Transfer Protocol) — это сетевой протокол, который позволяет публиковать новостные статьи на новостном сервере, распространять эти статьи на другие новостные сервера, предоставляя их для обсуждения группам одноранговых узлов по всему миру. NNTP был создан в 1985, принадлежит к семейству TCP/IP, порт 119/TCP, используется в таких решениях, как Outlook Express и Mozilla Thunderbird. Спецификация: RFC 3977. Основные расширения: RFC 2980. Принадлежит к группе протоколов прикладного уровня.
Содержание
- 1 Введение
- 2 Протокол NNTP
- 2.1 Подсоединение к Серверу Новостей
- 2.2 Pushing Новостных Статей на Сервер
- 2.3 Переход в режим чтения NNRP
- 2.4 Листинг доступных групп
- 2.5 Листинг активных групп
- 2.6 Размещение статьи
- 2.7 Листинг новых статей
- 2.8 Выбор группы для выполнения операции
- 2.9 Листинг статей в группе
- 2.10 Получение только заголовка статьи
- 2.11 Получение только тела статьи
- 2.12 Чтение статей из группы
- 2.13 Пример NNTP-сессии
- 3 Установка сервера NNTP
- 4 Ограничение доступа NNTP
- 5 Авторизация NNTP
- 6 Клиенты групп новостей и серверы групп новостей
- 7 Группы новостей
- 8 Ссылки
Введение
NNTP — протокол, разработанный для обмена сообщениями в телеконференциях. По строению этот протокол во многом схож с протоколом приема и передачи электронной почты SMTP.
Существует вариация протокола NNTP, называемая NNRP (Network News Readers Protocol). Она отличается только набором поддерживаемых команд, и предназначена для чтения конференций с сервера новостей клиентским ПО в режиме онлайн. Функционально NNTP ориентирован на то, что статьи отправляются подписчикам при их появлении на сервере, а NNRP — по запросу клиента. Соответственно, NNTP используется для обмена сообщениями между серверами новостей, а NNRP — для чтения сообщений с ньюссервера и создания новых сообщений.
За NNTP закреплён TCP-порт 119. При подключении к NNTP-серверу по SSL (т. н. NNTPS) используется порт 563.
NNTP предполагает, что серверы новостей имеют постоянное IP-подключение. Когда онлайн-технологии были менее распространены, серверы новостей обменивались новостями посредством uucp (Unix-to-Unix CoPy).
Протокол NNTP, как и SMTP, является текстовым, то есть все команды и ответы на них являются обычными текстовыми строками. Важной особенностью протокола NNTP является его эффективность в случае сложных графов связей между серверами новостей. Чтобы одно и то же сообщение не передавалось многократно, обычно отправляющий сервер сначала сообщает идентификатор нового сообщения, а само сообщение отправляет только после подтверждения принимающей стороны о том, что этого сообщения там ещё нет. В случае расширения stream NNTP эта концепция развивается ещё дальше: отправляющая сторона шлёт список идентификаторов новых статей, не дожидаясь ответа на каждый из них, и сами статьи, если принимающая запросила их по идентификаторам.
Часто серверы новостей держат постоянно открытыми одну или несколько NNTP-сессий, чтобы не открывать их каждый раз заново при получении новых сообщений.
Одинаковый по своему назначению с другими протоколами прикладного уровня, NNTP также имеет последовательность кодов состояния, большинство из которых идентичны Протоколу передачи гипертекстовых файлов HTTP. Коды состояния используются для передачи данных в различных режимах обратно пользователю NNTP. Различные коды состояния сгруппированы следующим образом:
1xx – Информационное сообщение 2xx – Команда верна 3xx – Команда верна, продолжить 4xx – Команда верна, но не может быть исполнена 5xx – Команда не исполнена (обычно из-за ошибки сервера)
Следующая цифра кода характеризует категорию отклика:
x0x Соединение, установка режима, прочие сообщения x1x Выбор группы новостей x2x Выбор статьи x3x Функции распределения x4x Отправка адресату x8x Нестандартное (частное применение) расширение x9x Отладочный вывод
Вместо того, чтобы полагаться на пакетные технологии, такие как UUCP для передачи новостных статей между машинами, NNTP позволяет обмениваться статьями через интерактивную сеть связи. NNTP это не конкретный программный пакет, а Интернет-стандарт, описанный в RFC-977. Он основа на поток-ориентированном соединении, как правило через TCP, между клиентов где-либо в сети и сервером на хосте, который содержит новости на диске хранения. Потоковое соединение позволяет клиенту и серверу в интерактивном режиме обсудить передачу статьи практически без задержек, таким образом, сводя количество повторяющихся статей к минимуму. Вместе с высокими скоростями передачи через Интернет, это позволяет превосходить первоначальные UUCP сети. Несколько лет назад, было редкостью, когда новость обходила всю сеть за 2 недели, сейчас же на это требуется менее чем 2 дня. В самом Интернете этот предел снижается до нескольких минут.
Различные команды позволяют клиентам получать, отправлять и размещать статьи. Разница между отправкой и размещением в том, что последняя может включать в себя статьи с неполной информацией головы; это обычно означает, что пользователь только что написал статью. Поиск статьи может быть использован как клиентами передачи новостей, так и читающими. Это делает NNTP отличным инструментом для обеспечения доступа к новостям для многих клиентов в локальной сети.
NNTP также обеспечивает активный и пассивный способы передачи новостей, называемые ‘pushing’ и ‘pulling’. ‘Pushing’ это такой же протокол как и ihave/sendme, используемый C-News. Клиент предлагает статью на сервер с помощью команды, а сервер возвращает код ответа, который указывает, имеет ли он статью или она ему нужна. Если сервер хочет статью, клиент отсылает статью, оканчивающуюся одной точкой на отдельной строке. Такой способ имеет единственный недостаток: он создаёт большую нагрузку на серверную систему, так как система должна выполнять поиск в своей базе данных для каждой отдельной статьи.
Противоположная техника (‘pulling’) вытягивает новости, в которых клиент запрашивает список всех (доступных) статей из группы, поступивших после указанной даты. Из возвращаемого списка ID сообщений, клиент выбирает статьи, которых у него нет. Такой способ нуждается в жёстком контроле над сервером.
Есть также ряд команд, удобных для чтения новостей, которые позволяют им получить заголовок статьи и тело отдельно, или даже отдельные строки заголовка из диапазона статей. Это позволяет сохранить все новости на центральном хосте. Общей проблемой NNTP является то, что она позволяет знающему человеку вставить статьи в поток новостей с ложной спецификацией отправителя. Это называется подменой. Расширение для NNTP позволяет требовать аутентификации пользователей для некоторых команд, обеспечивая некоторую степень защиты от людей, злоупотребляющих новостным сервером. Существует целый ряд пакетов NNTP. Одним из наиболее широко известных является NNTP-демон, также известный как эталонная реализация.
Протокол NNTP
Рассмотрим реальные сессии NNTP, чтобы показать работу протокола. Мы будем использовать простой клиент telnet для подключения северу новостей в Virtual Brewery под названием news.vbrew.com Сервер работает под управлением минимальной конфигурации.
Подсоединение к Серверу Новостей
Подключение к серверу новостей является таким же простым, как открытие TCP соединения к NNTP порту. При подключении, вас встретят приветственным баннером. Первая из команд, которую можно попробовать это help. Ответ, который вы получите, зависит как правило от того, верит ли сервер в то, что мы удаленный NNTP сервер или читатель, так как существуют различные наборы команд, отсылающих запросы. Вы можете изменить свой режим работы с помощью команды режима:
$ telnet news.vbrew.com nntp Trying 172.16.1.1... Connected to localhost. Escape character is '^]'. 200 news.vbrew.com InterNetNews server INN 1.7.2 08-Dec-1997 ready help 100 Legal commands authinfo help ihave check takethis list mode xmode quit head stat xbatch xpath xreplic For more information, contact "usenet" at this machine.
Ответ на NNTP команды всегда заканчивается точкой на отдельной строке. Цифры, которые вы видите в выходном листинге являются кодами ответом и используются сервером, чтобы указать на успех или неудачу выполнения команды.
Pushing Новостных Статей на Сервер
Команда IHAVE используется для отправки списка статей, которые уже имеет клиент. Рассмотрим, как работает данная команда:
ihave <123456@gw.vk2ktj.ampr.org> 335 From: terry@gw.vk2ktj.ampr.org Subject: test message sent with ihave Newsgroups: junk Distribution: world Path: gw.vk2ktj.ampr.org Date: 26 April 1999''' Message-ID: <123456@gw.vk2ktj.ampr.org> Body: This is a test message sent using the NNTP IHAVE command. . 235
Все команды нечувствительны к регистру, поэтому вы можете ввести их любой регистре. Команда IHAVE принимает один обязательный аргумент, ID сообщения статьи. Каждой новостной статье присваивается уникальный идентификатор сообщения при его создании. Команда IHAVE обеспечивает способ сервера NNTP сказать, какие статьи у него есть, чтобы отправить из на другой сервер. Отправляющий сервер будет выдавать команду для каждой статьи. Если код команды ответа, генерирующийся принимающим NNTP сервером, находится в диапазоне “3xx”, отправляющий сервер NNTP будет передавать полную статью, включая его полный заголовок. Если код ответа был в диапазоне “4xx”, принимающий сервер решил не принимать эту статью, либо потому что она уже у него есть, либо из-за каких-либо проблем.
Когда статья передана, принимающий сервер отправляет другой код ответа, указывающий на то, была ли передача успешно завершена.
Переход в режим чтения NNRP
Читатели новостей используют свой собственный набор команд при разговоре с сервером новостей. Чтобы активировать эти команды, сервер новостей должен работать в режиме чтения. Большинство серверов новостей по умолчанию находятся в режиме чтения. NNTP обеспечивает команду для явного переключения в режим чтения:
mode reader 200 news.vbrew.com InterNetNews NNRP server INN 1.7.2 08-Dec-1997 ready/ (posting ok). help 100 Legal commands authinfo user Name|pass Password|generic <prog> <args> article [MessageID|Number] body [MessageID|Number] date group newsgroup head [MessageID|Number] help ihave last list [active|active.times|newsgroups|distributions|distrib.pats|/ loverview.fmt|subscriptions] listgroup newsgroup mode reader newgroups yymmdd hhmmss ["GMT"] [<distributions>] newnews newsgroups yymmddhhmmss ["GMT"] [<distributions>] next post slave stat [MessageID|Number] xgtitle [group_pattern] xhdr header [range|MessageID] xover [range] xpat header range|MessageID pat [morepat...] xpath MessageID Report problems to <usenet@vlager.vbrew.com> .
Режим чтения имеет множество команд. Многие из них разработаны, чтобы упростить чтение новостей. Ранее упоминалось, что есть команды, позволяющие инструктировать сервер отправить голову и тело статьи отдельно. Существуют также команды, которые перечисляют доступные группы и статьи, и другие, которые позволяют разместить статью, альтернативный способ отправки новостей на сервер.
Листинг доступных групп
Команда листинга перечисляет множество различных типов информации; в частности, группы поддерживаемых серверов:
list newsgroups 215 Descriptions in form "group description". control News server internal group junk News server internal group local.general General local stuff local.test Local test group .
Листинг активных групп
Показывает список каждой поддерживаемой группы и предоставляет информацию о них. Два числа в каждой строке вывода являются наибольшим номером статьи и наименьшим номером статьи в каждой группе. Последнее поле в выводе отображает флаги, которые контролируют, разрешено ли размещение новостей в данной группе, модерируемая ли группа, хранятся ли новости или просто передаются.
list active 215 Newsgroups in form "group high low flags". control 0000000000 0000000001 y junk 0000000003 0000000001 y alt.test 0000000000 0000000001 y .
Размещение статьи
Когда вы используете ‘pushing’ для размещения статьи, есть неявное предположение о том, что статья уже существует, что она имеет идентификатор сообщения, который уже был присвоен ей сервером, в котором он был первоначально размещён, и что она имеет полным набор заголовков. При публикации статьи, вы создаёте статьи в первый раз и поставляете те заголовки, которые являются значимыми только для вас, такие как Subject и Группа новостей. Сервер новостей добавляет остальные заголовки и создаёт идентификатор.
Это означает, что размещение статьи даже проще, чем ‘pushing’.
post 340 Ok From: terry@richard.geek.org.au Subject: test message number 1 Newsgroups: junk Body: This is a test message, please feel free to ignore it. . 240 Article posted
Листинг новых статей
Когда читатель подключается к новому серверу и пользователь выбирает новостную группу, читатель получает список новых статей, которые были размещены и пересланы с момента последнего входа в систему. С этой целью используется команда newnews
. С ней передаются 3 обязательных аргумента: название группы или групп запроса, дата начала и время начала списка. Дата и время каждый раз задаются шестизначным числом: YYMMDD и HHMMSS:
newnews junk 990101 000000 230 New news follows <7g2o5r$aa$6@news.vbrew.com> <7g5bhm$8f$2@news.vbrew.com> <7g5bk5$8f$3@news.vbrew.com> .
Выбор группы для выполнения операции
Когда пользователь выбирает новостную группу для просмотра, читатель может указать, какой сервер был выбран группой. Это упрощает взаимодействие между сервером и читателем; он устраняет необходимость постоянно посылать имя группы новостей с каждой командой. Команда просто берёт имя выбранной группы в качестве аргумента. Многие следующие команды используют группу, выбранную по умолчанию, если другая группа новостей явно не указана:
group junk 211 3 1 3 junk
Команда возвращает сообщение, указывающее число активных сообщений, наименьшее и наибольшее значение идентификаторов сообщений, имя группы.
Листинг статей в группе
Для решения новостных групп статей, читатель должен знать, какие номера статей представляют активные статьи. Команда предлагает список активных номеров статей в текущей группе или в явно указанной группе:
listgroup junk 211 Article list follows 1 2 3 .
Получение только заголовка статьи
Пользователь должен иметь некоторую информацию о статье, прежде чем знать, хочет ли он её прочитать. Команда head используется для запроса получения исключительно заголовка указанной статьи. Это используется, чтобы снизить нагрузку на сеть в случае, если статья большая. А пользователь не хочет её читать, тогда нет необходимости в отправке целой статьи.
Статьи можно получать, используя их номер или идентификатор сообщения:
head 2 221 2 <7g5bhm$8f$2@news.vbrew.com> head Path: news.vbrew.com!not-for-mail From: terry@richard.geek.org.au Newsgroups: junk Subject: test message number 2 Date: 27 Apr 1999 21:51:50 GMT Organization: The Virtual brewery Lines: 2 Message-ID: <7g5bhm$8f$2@news.vbrew.com> NNTP-Posting-Host: localhost X-Server-Date: 27 Apr 1999 21:51:50 GMT Body: Xref: news.vbrew.com junk:2 .
Получение только тела статьи
Если же, с другой стороны, пользователь решает, что он хочет прочитать статью, читатель должен иметь возможность запросить тело сообщения. Команда body используется с этой целью.
body 2 222 2 <7g5bhm$8f$2@news.vbrew.com> body This is another test message, please feel free to ignore it too. .
Чтение статей из группы
Хотя, как правило, наиболее эффективно передавать отдельно заголовки и тела выбранных статей, случается, что нам лучше передать полную статью.
Естественно, NNTP обеспечивает возможность сделать это. Команда принимает номер статьи или идентификатор сообщения в качестве аргумента, возвращая статью:
article 1 220 1 <7g2o5r$aa$6@news.vbrew.com> article Path: news.vbrew.com!not-for-mail From: terry@richard.geek.org.au Newsgroups: junk Subject: test message number 1 Date: 26 Apr 1999 22:08:59 GMT Organization: The Virtual brewery Lines: 2 Message-ID: <7g2o5r$aa$6@news.vbrew.com> NNTP-Posting-Host: localhost X-Server-Date: 26 Apr 1999 22:08:59 GMT Body: Xref: news.vbrew.com junk:1 This is a test message, please feel free to ignore it. .
При попытке получить неизвестную статью, сервер возвратит сообщение с соответствующим образом закодированным ответом и возможно читаемым текстом сообщения:
article 4 423 Bad article number
Пример NNTP-сессии
Букве C: соответствует клиент, а букве S: - сервер. Пример - рассылка новых статей:
S: прослушивает порт 119 TCP C: запрашивает соединения к порту 119 TCP S: 200 BANZAIVAX news server ready, рассылка разрешена. C: POST S: 340 Continue posting; Period on a line by itself to end C: Передает статью в формате RFC850 C: . S: 240 Article posted successfully. C: QUIT S: 205 BANZAIVAX closing connection. Goodbye.
Пример - относительный доступ с помощью команды NEXT:
S: прослушивает порт 119 TCP C: запрашивает соединения к порту 119 TCP S: 200 wombatvax news server ready - posting ok (Клиент запрашивает список текущих новостей) C: LIST S: 215 далее следует список групп новостей S: net.wombats 00543 00501 y S: net.unix-wizards 10125 10011 y (какая-то еще информация) S: net.idiots 00100 00001 n S: . (Клиент выбирает группу новостей) C: GROUP net.unix-wizards S: 211 104 10011 10125 net.unix-wizards group selected (В файле 104 статьи с 10011 по 10125) (Клиент выбирает статью для чтения) C: STAT 10110 S: 223 10110 <23445@sdcsvax.ARPA> article retrieved - statistics only (article 10110 selected, its message-id is <23445@sdcsvax.ARPA>) (Клиент просматривает заголовок) C: HEAD S: 221 10110 <23445@sdcsvax.ARPA> article retrieved - далее следует заголовок S: . (Клиент хочет просмотреть текст статьи) C: BODY S: 222 10110 <23445@sdcsvax.ARPA> article retrieved - далее следует текст статьи S: . (Клиент хочет просмотреть следующую статью данной группы) C: NEXT S: 223 10113 <21495@nudebch.uucp> article retrieved - statistics only (статья 10113 является следующей в группе) (Клиент завершает сессию) C: QUIT S: 205 goodbye.
Большой список примеров по ссылке.
Установка сервера NNTP
Сервер NNTP (nntpd) может быть скомпилирован двумя способами, в зависимости от ожидаемой нагрузки на систему. Не существует никаких скомпилированных версий из-за некоторых специфических значений по умолчанию, которые зашиты в исполняемый файл. Вся настройка осуществляется с помощью макросов, определённых в common/conf.h
Nntpd может быть сконфигурирован как автономный сервер, который запускается во время загрузки системы из файла rc
или демона, управляемого inetd
. В последнем случае, вы должны иметь следующую запись в /etc/inted.conf
:
nntp stream tcp nowait news /usr/etc/in.nntpd nntpd
Если настраивать nntpd как автономный сервер, необходимо убедиться, что любая строка в вышеуказанном файле закомментирована. В любо случае, вы должны убедиться, что следующая строка имеется в /etc/services
:
nntp 119/tcp readnews untp # Network News Transfer Protocol
Для того, чтобы временно хранить любые входящие статьи, nntpd нуждается в .tmp
каталоге. Вы должны создать его с помощью следующих команд:
# mkdir /var/spool/news/.tmp # chown news.news /var/spool/news/.tmp
Ограничение доступа NNTP
Доступ к NNTP ресурсам регулируется файлом nntp_access
в /etc/news
. Строки в этом файле описывает права доступа, предоставленные сторонним хостам. Каждая строка имеет формат:
site read|xfer|both|no post|no [!exceptgroups]
Если клиент подключается к порту NNTP, nntpd пытается получить полное доменное имя хоста по его IP-адресу с помощью обратного поиска. Имя хоста и IP-адрес клиента проверяются сайтом в том порядке, в котором они появляются в файле. Совпадения могут быть частичные или полные. Если запись соответствует точно, она применяется, если совпадение частичное, тона применяется только если нет других совпадения.
Hostname
Полное доменное имя хоста. Если это соответствует каноничному имени машины клиента в буквальном смысле, запись применяется, и все последующие записи игнорируются.
IP address
Если IP-адрес клиента соответствует, запись применяется, все последующие записи игнорируются.
Domain name
Доменное имя, определяется как *.domain. Если имя хоста клиента совпадает с именем домена, запись совпадает.
Network name
Имя сети. Указано в /etc/networks
. Если номер сети клиентского IP-адреса совпадает с номером, связанным с именем сети, запись совпадает.
Default
Строка по умолчанию соответствует любому клиенту.
Второе и третье поля описывают права доступа, предоставляемые клиенту. Второе поле детализирует разрешения для получения новостей посредством ‘pulling’ (чтения) и передачи новостей посредством ‘pushing’. Значение обоих позволяет оба; если нет, то отказывает в целом в доступе. Третье поле предоставляет клиенту право размещать статьи, то есть доставлять статьи с неполной информацией заголовков, которая завершается с помощью программного обеспечения новостей. Если второе поле ничего не содержит, третье поле игнорируется.
Четвёртое поле необязательно, содержит разделённые запятыми списки групп, к котором клиенту запрещён доступ.
Пример файла nntp_access
:
# # by default, anyone may transfer news, but not read or post default xfer no # # public.vbrew.com offers public access via modem. We allow # them to read and post to any but the local.* groups public.vbrew.com read post !local # # all other hosts at the brewery may read and post *.vbrew.com read post
Авторизация NNTP
Демон nntpd обеспечивает простую схему авторизации. Если воспользоваться любым маркером доступа в файле nntp_access
, nntpd требует авторизации от клиента для соответствующей операции.
Процедура авторизации осуществляется с помощью команды AUTHINFO
. С помощью этой команды, клиент передаёт имя пользователя и пароль к серверу NNTP. Nntpd сверяет их с /etc/passwd
базой данных и проверяет, принадлежит ли пользователь группе NNTP.
Текущая реализация NNTP авторизации экспериментальна и не слишком переносима.
Клиенты групп новостей и серверы групп новостей
Иногда говорят «клиент групп новостей» вместо «NNTP-клиент». Следует понимать, что NNTP-клиенты поддерживают протокол NNTP не в полной мере, а лишь его вариацию NNRP. На сегодняшний день доступны следующие клиентские программы:
Название | Операционные системы | Интерфейс | Примечание | |||
---|---|---|---|---|---|---|
Microsoft Windows | Unix-подобная ОС | Mac OS X | ГПИ | ТПИ | ||
Claws Mail | да | да | да | да | нет | Форк Sylpheed. Работает также на Maemo. |
Forté Agent | да | нет | нет | да | нет | |
Gnus | да | да | да | да | да | Расширение для Emacs. |
Wanderlust | да | да | да | да | да | Расширение для Emacs. |
KNode | неизвестно | да | да | да | нет | Входит в состав KDE. |
Mozilla Thunderbird | да | да | да | да | нет | Есть сторонняя сборка под OS/2. |
SeaMonkey | да | да | да | да | нет | |
MyGate | да | нет | нет | да | нет | Расширение для The Bat!. |
Opera Mail | да | да | да | да | нет | Входит в состав Opera. |
Outlook Express | да | нет | нет | да | нет | Есть версия под Mac OS 9. |
Pan | неизвестно | да | да | да | нет | Входит в состав GNOME. |
slrn | да | да | да | нет | да | Работает также на иных платформах (BeOS, OS/2, OpenVMS). |
Sylpheed | да | да | да | да | нет | |
tin | да | да | да | нет | да | Работает также под OpenVMS. |
Из серверного программного обеспечения известно:
Название | Операционные системы | Примечание | ||
---|---|---|---|---|
Microsoft Windows | Unix-подобная OC | Mac OS X | ||
Apache James | да | да | да | Написан на Java. |
InterNetNews(INN) | нет | да | нет | Самый известный сервер, разрабатываемый Internet Systems Consortium (ISC). |
Leafnode | нет | да | нет | Прокси-сервер. |
Другие реализации можно попытаться найти в Open Directory Project (ODP).
Группы новостей
Большинство групп новостей, распространяемых при помощи NNTP, принадлежит сети Usenet. В Интернете существуют однако и другие группы новостей: предоставляемые шлюзами других сетей, частные и т. п.
Ссылки
- Протокол NNTP (рус.)
- Network News Transfer Protocol (рус.)
- Описание команд (рус.)
- NNTP (рус.)
- Linux Network Administrator's Guide, 2nd Edition By Olaf Kirch & Terry Dawson (англ.)
ISSN 2542-0356
Следуй за Полисом
Оставайся в курсе последних событий
Лицензия
Если не указано иное, содержание этой страницы доступно по лицензии Creative Commons «Attribution-NonCommercial-NoDerivatives» 4.0, а примеры кода – по лицензии Apache 2.0. Подробнее см. Условия использования.