Архив рубрики: Публикации

20 команд netstat для управления сетью Linux и Windows

20 команд netstat для управления сетью Linux и Windows




Этот инструмент очень важен и полезен для сетевых администраторов Linux/Windows для мониторинга и устранения неполадок, связанных с сетью, и определения производительности сетевого трафика. В этой статье показано использование команды netstat с примерами, которые могут быть полезны при ежедневной работе.




1. Перечисление всех портов для соединений TCP и UDP




Список всех портов (как TCP, так и UDP) с использованием опции netstat -a.




# netstat -a | more







2. Перечисление соединений TCP-портов




Список соединений TCP (Transmission Control Protocol) с использованием опции netstat -at.




# netstat -at







3. Спикок соединений портов UDP




Список соединений UDP (User Datagram Protocol) с использованием опции netstat -au.




# netstat -au







4. Список всех открытых входящих портов




Список всех открытых входящих портов с использованием опции netstat -l.




# netstat -l







5. Список всех активных входящих портов TCP




Список всех активных TCP-портов прослушивания с использованием опции netstat -lt.




# netstat -lt







6. Список всех активных входящих портов UDP




Список всех активных входящих портов UDP с использованием опции netstat -lu.




# netstat -lu







7. Список всех активных входящих сокетов UNIX




Список всех активных входящих сокетов UNIX с помощью опции netstat -lx.




# netstat -lx







8. Отображение статистики по всем протоколам




По умолчанию для протоколов TCP, UDP, ICMP и IP показаны статистические данные. Параметр -s может использоваться для указания набора протоколов.




# netstat -s







9. Отображение статистики по протоколу TCP




Отображение статистики TCP-протокола с использованием опции netstat -st.




# netstat -st







10. Отображение статистики по протоколу UDP




Отображение статистики UDP-протокола с использованием опции netstat -su.




# netstat -su







11. Отображение имени службы с PID




Ниже приведен пример отображения имени службы с её номером PID. Для этого необходимо использовать опцию netstat -tp, которая отобразит «PID / Program Name».




# netstat -tp







12. Отображение режима Promiscuous




Promiscuous mode или promisc mode — так называемый «неразборчивый» режим, в котором сетевая плата позволяет принимать все пакеты независимо от того, кому они адресованы.




Отображая режим Promiscuous с переключателем -ac, netstat выводит выбранную информацию на экран и обновляет её каждые пять секунд. По умолчанию экран обновляется каждую секунду.




# netstat -ac 5 | grep tcp







13. Отображение маршрутизации IP-адреса ядра




Отображение таблицы IP-маршрутизации ядра с помощью команды netstat.




# netstat -r







14. Отображение транзакций сетевого интерфейса




Отображение транзакций пакетов сетевого интерфейса, включая как отправляемые, так и принимаемые пакеты с размером MTU.




# netstat -i







15. Отображение таблицы интерфейса ядра




Команда отображает таблицу интерфейса ядра, аналогично команде ifconfig.




# netstat -ie







16. Отображение информации IPv4 и IPv6




Отображает информацию о членстве в многоадресной группе для IPv4 и IPv6.




# netstat -g







17. Циклический вывод информации Netstat




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




# netstat -c







18. Поиск не поддерживаемых адресов




Команда выводит список не настроенных семейств адресов с некоторой полезной информацией.




# netstat --verbose







19. Поиск программ прослушивания




Узнайте, сколько программ прослушивает работу на портов.




# netstat -ap | grep http







20. Отображение статистики сети RAW




Команда отображает статистику сети RAW со всей сопутствующей полезной информацией.




# netstat --statistics --raw







Источник: https://blog.sedicomm.com/2017/07/11/20-komand-netstat-dlya-upravleniya-setyu-linux-i-windows/



2021-03-07T11:50:18
Утилиты командной строки

Grep поиск текста в файлах Linux

Grep поиск текста в файлах Linux




Иногда может понадобится найти файл, в котором содержится определённая строка или найти строку в файле, где есть нужное слово. В Linux всё это делается с помощью одной очень простой, но в то же время мощной утилиты grep. С её помощью можно искать не только строки в файлах, но и фильтровать вывод команд, и много чего ещё.




В этой инструкции мы рассмотрим, как выполняется поиск текста в файлах Linux, подробно разберём возможные опции grep, а также приведём несколько примеров работы с этой утилитой.




Что такое grep?




Команда grep (расшифровывается как global regular expression print) — одна из самых востребованных команд в терминале Linux, которая входит в состав проекта GNU. Секрет популярности — её мощь, она даёт возможность пользователям сортировать и фильтровать текст на основе сложных правил.




Утилита grep решаем множество задач, в основном она используется для поиска строк, соответствующих строке в тексте или содержимому файлов. Также она может находить по шаблону или регулярным выражениям. Команда в считанные секунды найдёт файл в с нужной строчкой, текст в файле или отфильтрует из вывода только пару нужных строк. А теперь давайте рассмотрим, как ей пользоваться.




Синтаксис grep




Синтаксис команды выглядит следующим образом:




$ grep [опции] шаблон [имя файла…]




Или:




$ команда | grep [опции] шаблон




  • Опции — это дополнительные параметры, с помощью которых указываются различные настройки поиска и вывода, например количество строк или режим инверсии.
  • Шаблон — это любая строка или регулярное выражение, по которому будет вестись поиск
  • Файл и команда — это то место, где будет вестись поиск. Как вы увидите дальше, grep позволяет искать в нескольких файлах и даже в каталоге, используя рекурсивный режим.




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




Опции




Давайте рассмотрим самые основные опции утилиты, которые помогут более эффективно выполнять поиск текста в файлах grep:




  • -b — показывать номер блока перед строкой;
  • -c — подсчитать количество вхождений шаблона;
  • -h — не выводить имя файла в результатах поиска внутри файлов Linux;
  • -i — не учитывать регистр;
  • — l — отобразить только имена файлов, в которых найден шаблон;
  • -n — показывать номер строки в файле;
  • -s — не показывать сообщения об ошибках;
  • -v — инвертировать поиск, выдавать все строки кроме тех, что содержат шаблон;
  • -w — искать шаблон как слово, окружённое пробелами;
  • -e — использовать регулярные выражения при поиске;
  • -An — показать вхождение и n строк до него;
  • -Bn — показать вхождение и n строк после него;
  • -Cn — показать n строк до и после вхождения;




Все самые основные опции рассмотрели и даже больше, теперь перейдём к примерам работы команды grep Linux.




Примеры использования




С теорией покончено, теперь перейдём к практике. Рассмотрим несколько основных примеров поиска внутри файлов Linux с помощью grep, которые могут вам понадобиться в повседневной жизни.




Поиск текста в файлах




В первом примере мы будем искать пользователя User в файле паролей Linux. Чтобы выполнить поиск текста grep в файле /etc/passwd введите следующую команду:




 grep User /etc/passwd




В результате вы получите что-то вроде этого, если, конечно, существует такой пользователь:




User:x:1000:1000:User,,,:/home/User:/bin/bash




А теперь не будем учитывать регистр во время поиска. Тогда комбинации ABC, abc и Abc с точки зрения программы будут одинаковы:




grep -i "user" /etc/passwd




Вывести несколько строк




Например, мы хотим выбрать все ошибки из лог-файла, но знаем, что в следующей строчке после ошибки может содержаться полезная информация, тогда с помощью grep отобразим несколько строк. Ошибки будем искать в Xorg.log по шаблону «EE»:




 grep -A4 "EE" /var/log/xorg.0.log




Выведет строку с вхождением и 4 строчки после неё:




grep -B4 "EE" /var/log/xorg.0.log




Выведет целевую строку и 4 строчки до неё:




grep -C2 "EE" /var/log/xorg.0.log




Выведет по две строки с верху и снизу от вхождения.




Регулярные выражения в grep




Регулярные выражения grep — очень мощный инструмент в разы расширяющий возможности поиска текста в файлах. Для активации этого режима используйте опцию -e. Рассмотрим несколько примеров:




Поиск вхождения в начале строки с помощью спецсимвола «^», например, выведем все сообщения за ноябрь:




grep "^Nov 10" messages.1

Nov 10 01:12:55 gs123 ntpd[2241]: time reset +0.177479 s
Nov 10 01:17:17 gs123 ntpd[2241]: synchronized to LOCAL(0), stratum 10




Поиск в конце строки — спецсимвол «$»:




grep "terminating.$" messages

Jul 12 17:01:09 cloneme kernel: Kernel log daemon terminating.
Oct 28 06:29:54 cloneme kernel: Kernel log daemon terminating.




Найдём все строки, которые содержат цифры:




grep "[0-9]" /var/log/Xorg.0.log




Вообще, регулярные выражения grep — это очень обширная тема, в этой статье я лишь показал несколько примеров. Как вы увидели, поиск текста в файлах grep становиться ещё эффективнее. Но на полное объяснение этой темы нужна целая статья, поэтому пока пропустим её и пойдем дальше.




Рекурсивное использование grep




Если вам нужно провести поиск текста в нескольких файлах, размещённых в одном каталоге или подкаталогах, например в файлах конфигурации Apache — /etc/apache2/, используйте рекурсивный поиск. Для включения рекурсивного поиска в grep есть опция -r. Следующая команда займётся поиском текста в файлах Linux во всех подкаталогах /etc/apache2 на предмет вхождения строки mydomain.com:




grep -r "mydomain.com" /etc/apache2/




В выводе вы получите:




grep -r "zendsite" /etc/apache2/

/etc/apache2/vhosts.d/zendsite_vhost.conf: ServerName zendsite.localhost
/etc/apache2/vhosts.d/zendsite_vhost.conf: DocumentRoot /var/www/localhost/htdocs/zendsite
/etc/apache2/vhosts.d/zendsite_vhost.conf: <Directory /var/www/localhost/htdocs/zendsite>




Здесь перед найденной строкой указано имя файла, в котором она была найдена. Вывод имени файла легко отключить с помощью опции -h:




grep -h -r "zendsite" /etc/apache2/

ServerName zendsite.localhost
DocumentRoot /var/www/localhost/htdocs/zendsite
<Directory /var/www/localhost/htdocs/zendsite>




Поиск слов в grep




Когда вы ищете строку abc, grep будет выводить также kbabc, abc123, aafrabc32 и тому подобные комбинации. Вы можете заставить утилиту искать по содержимому файлов в Linux только те строки, которые выключают искомые слова с помощью опции -w:




grep -w "abc" имя_файла




Поиск двух слов




Можно искать по содержимому файла не одно слово, а два сразу:




 egrep -w 'word1|word2' /path/to/file




Количество вхождений строки




Утилита grep может сообщить, сколько раз определённая строка была найдена в каждом файле. Для этого используется опция -c (счетчик):




grep -c 'word' /path/to/file




C помощью опции -n можно выводить номер строки, в которой найдено вхождение, например:




grep -n 'root' /etc/passwd




Получим:




1:root:x:0:0:root:/root:/bin/bash




Инвертированный поиск в grep




Команда grep Linux может быть использована для поиска строк в файле, которые не содержат указанное слово. Например, вывести только те строки, которые не содержат слово пар:




 grep -v пар /path/to/file




Вывод имени файла




Вы можете указать grep выводить только имя файла, в котором было найдено заданное слово с помощью опции -l. Например, следующая команда выведет все имена файлов, при поиске по содержимому которых было обнаружено вхождение primary:




grep -l 'primary' *.c




Цветной вывод в grep




Также вы можете заставить программу выделять другим цветом вхождения в выводе:




 grep --color root /etc/passwd




Получится:







Выводы




Вот и всё. Мы рассмотрели использование команды grep для поиска и фильтрации вывода команд в операционной системе Linux. При правильном применении эта утилита станет мощным инструментом в ваших руках. Если у вас остались вопросы, пишите в комментариях!




Источник: https://losst.ru/gerp-poisk-vnutri-fajlov-v-linux



2021-03-07T11:28:48
Утилиты командной строки

Команда find в Linux

Команда find в Linux




Очень важно уметь вовремя и очень быстро найти нужную информацию в системе. Конечно, все современные файловые менеджеры предлагают отличные функции поиска, но им не сравнится с поиском в терминале Linux. Он намного эффективнее и гибче обычного поиска, вы можете искать файлы не только по имени, но и по дате добавления, содержимому, а также использовать для поиска регулярные выражения. Кроме того, с найденными файлами можно сразу же выполнять необходимые действия.




В этой статье мы поговорим о поиске с помощью очень мощной команды find Linux, подробно разберем ее синтаксис, опции и рассмотрим несколько примеров.




Основная информация о FIND




Find — это одна из наиболее важных и часто используемых утилит системы Linux. Это команда для поиска файлов и каталогов на основе специальных условий. Ее можно использовать в различных обстоятельствах, например, для поиска файлов по разрешениям, владельцам, группам, типу, размеру и другим подобным критериям.




Утилита find предустановлена по умолчанию во всех Linux дистрибутивах, поэтому вам не нужно будет устанавливать никаких дополнительных пакетов. Это очень важная находка для тех, кто хочет использовать командную строку наиболее эффективно.




Команда find имеет такой синтаксис:




find [папка] [параметры] критерий шаблон [действие]




Папка — каталог в котором будем искать




Параметры — дополнительные параметры, например, глубина поиска, и т д




Критерий — по какому критерию будем искать: имя, дата создания, права, владелец и т д.




Шаблон — непосредственно значение по которому будем отбирать файлы.




Основные параметры команды find




Я не буду перечислять здесь все параметры, рассмотрим только самые полезные.




  • -P никогда не открывать символические ссылки
  • -L — получает информацию о файлах по символическим ссылкам. Важно для дальнейшей обработки, чтобы обрабатывалась не ссылка, а сам файл.
  • -maxdepth — максимальная глубина поиска по подкаталогам, для поиска только в текущем каталоге установите 1.
  • -depth — искать сначала в текущем каталоге, а потом в подкаталогах
  • -mount искать файлы только в этой файловой системе.
  • -version — показать версию утилиты find
  • -print — выводить полные имена файлов
  • -type f — искать только файлы
  • -type d — поиск папки в Linux




Критерии




Критериев у команды find в Linux очень много, и мы опять же рассмотрим только основные.




  • -name — поиск файлов по имени
  • -perm — поиск файлов в Linux по режиму доступа
  • -user — поиск файлов по владельцу
  • -group — поиск по группе
  • -mtime — поиск по времени модификации файла
  • -atime — поиск файлов по дате последнего чтения
  • -nogroup — поиск файлов, не принадлежащих ни одной группе
  • -nouser — поиск файлов без владельцев
  • -newer — найти файлы новее чем указанный
  • -size — поиск файлов в Linux по их размеру




Примеры использования




А теперь давайте рассмотрим примеры find, чтобы вы лучше поняли, как использовать эту утилиту.




1. Поиск всех файлов




Показать все файлы в текущей директории:




find

find .

find . -print




2. Поиск файлов в определенной папке




Показать все файлы в указанной директории:




find ./test




Искать файлы по имени в текущей папке:




find . -name "*.jpg"




Не учитывать регистр при поиске по имени:




find . -iname "test*"




3. Ограничение глубины поиска




Поиска файлов по имени в Linux только в этой папке:




find . -maxdepth 1 -name "*.php"




4. Инвертирование шаблона




Найти файлы, которые не соответствуют шаблону:




find . -not -name "test*"




5. Несколько критериев




Поиск командой find в Linux по нескольким критериям, с оператором исключения:




 find . -name "test" -not -name "*.php"




Найдет все файлы, начинающиеся на test, но без расширения php. А теперь рассмотрим оператор ИЛИ:




find -name "*.html" -o -name "*.php"




6. Несколько каталогов




Искать в двух каталогах одновременно:




find ./test ./test2 -type f -name "*.c"




7. Поиск скрытых файлов




Найти скрытые файлы:




find ~ -type f -name ".*"




8. Поиск по разрешениям




Найти файлы с определенной маской прав, например, 0664:




find . type f -perm 0664




Найти файлы с установленным флагом suid/guid:




find / -perm 2644




Или так:




find / -maxdepth 2 -perm /u=s




Поиск файлов только для чтения:




find /etc -maxdepth 1 -perm /u=r




Найти только исполняемые файлы:




find /bin -maxdepth 2 -perm /a=x




9. Поиск файлов по группах и пользователях




Найти все файлы, принадлежащие пользователю:




find . -user sergiy




Поиск файлов в Linux принадлежащих группе:




find /var/www -group developer




10. Поиск по дате модификации




Поиск файлов по дате в Linux осуществляется с помощью параметра mtime. Найти все файлы модифицированные 50 дней назад:




find / -mtime 50




Поиск файлов в Linux открытых N дней назад:




find / -atime 50




Найти все файлы, модифицированные между 50 и 100 дней назад:




find / -mtime +50 –mtime -100




Найти файлы измененные в течении часа:




find . -cmin 60




11. Поиск файлов по размеру




Найти все файлы размером 50 мегабайт:




find / -size 50M




От пятидесяти до ста мегабайт:




find / -size +50M -size -100M




Найти самые маленькие файлы:




find . -type f -exec ls -s {} ; | sort -n -r | head -5




Самые большие:




find . -type f -exec ls -s {} ; | sort -n | head -5




12. Поиск пустых файлов и папок




Поиск файлов




find /tmp -type f -empty




Поиск папок




find ~/ -type d -empty




13. Действия с найденными файлами




Для выполнения произвольных команд для найденных файлов используется опция -exec. Например, выполнить ls для получения подробной информации о каждом файле:




find . -exec ls -ld {} ;




Удалить все текстовые файлы в tmp




find /tmp -type f -name "*.txt" -exec rm -f {} ;




Удалить все файлы больше 100 мегабайт:




find /home/bob/dir -type f -name *.log -size +10M -exec rm -f {} ;




Вывод




Вот и подошла к концу эта небольшая статья, в которой была рассмотрена команда find. Как видите, это одна из наиболее важных команд терминала Linux, позволяющая очень легко получить список нужных файлов. Ее желательно знать всем системным администраторам. Если вам нужно искать именно по содержимому файлов, то лучше использовать команду grep.




Источник: https://losst.ru/komanda-find-v-linux



2021-03-07T11:12:48
Утилиты командной строки

Использование VLAN между двумя марутизаторами MikroTik

В моей домашней сети все устройства, относящиеся к умному дому отселены в отдельную сеть, это не только шлюзы и лампы Xiaomi, а также телевизор, медиа проигрыватель, ресивер, различные Wi-Fi реле и розетки, и, конечно сервер Home Assistant. Это повышает безопасность, устройства локальной сети, кроме избранных, не будут иметь доступ к ресурсам умного дома и соответственно вероятность того, что кто-то случайно или специально выкрутит громкость ресивера на максимум со своего телефона не велика, а беря в руки пульт или прикасаясь к ручке громкости можно получить в лоб этим самым пультом.




Собственно, есть два устройства MikroTik, RB4011 и RB962, оба маршрутизаторы, первый работает как шлюз для доступа в интернет и switch, второй как switch и Wi-Fi точка доступа. В устройствах собрано по два бриджа, для домашней локальной сети и сети умного дома, Wi-Fi точка доступа домашней сети работает в диапазонах 2.4G и 5G, Wi-Fi точка для подключения устройств УД только в 2.4G. Устройства находятся в разных помещениях квартиры и соединены проводом. Что бы не тянуть второй провод и обеспечения передачи трафика обоих сетей между устройствами будут использоваться VLAN’ы, питание на второе устройство будет подаваться по этому же проводу посредствам PoE.







Наверно здесь должно быть описание что такое VLAN’ы, для чего они нужны и как это работает, но этого не будет, считаем, что читатель уже знает, что это такое. Единственное замечание, это то, что описанный ниже способ, является программной реализацией обработки VLAN и вся нагрузка ложится на ЦП.




Настройка первого роутера




Устройство RB4011 имеет десять ethernet портов плюс порт SFP-SFP+. Порт SFP мы рассматривать не будем, в итоге мы должны будем получить следующую конфигурацию:




  • Порт ether1 — интернет (WAN порт), считаем, что интернет на устройстве уже настроен
  • Bridge 18, IP адрес 192.168.18.1, ethernet порты 6 — 9, vlan18 untagged — сеть умного дома
  • Bridge 22, IP адрес 192.168.22.1, ethernet порты 2 — 5, vlan22 untagged — домашняя локальная сеть
  • Порт ether10 — trunk порт на второе устройство, vlan18 tagged, vlan22 tagged




Переименовываем порт ether10 в ether10-trunk, что бы было понятнее:




/interface ethernet set ether10 name="ether10-trunk"




Создаем vlan18 и vlan22 с соответствующими VLAN ID, оба вешаем на порт ether10-trunk, трафик на этом порту будет Tagged.




/interface vlan add name="vlan18" vlan-id=18 interface=ether10-trunk
/interface vlan add name="vlan22" vlan-id=22 interface=ether10-trunk




Создаем бриджи для двух сетей и назначаем им адреса, добавляем порты и VLAN’ы в соответствующие бриджи, трафик на портах бриджа будет Untagged.




/interface bridge add name="bridge18"
/interface bridge add name="bridge22"

/ip address add address=192.168.18.1 interface=bridge18
/ip address add address=192.168.22.1 interface=bridge22

/interface bridge port add bridge=bridge18 interface=ether6
/interface bridge port add bridge=bridge18 interface=ether7
/interface bridge port add bridge=bridge18 interface=ether8
/interface bridge port add bridge=bridge18 interface=ether9
/interface bridge port add bridge=bridge18 interface=vlan18

/interface bridge port add bridge=bridge22 interface=ether2
/interface bridge port add bridge=bridge22 interface=ether3
/interface bridge port add bridge=bridge22 interface=ether4
/interface bridge port add bridge=bridge22 interface=ether5
/interface bridge port add bridge=bridge22 interface=vlan22




Настройка второго роутера




Устройство RB962 имеет пять ethernet портов плюс порт SFP, два WLAN интерфейса, на wlan1 работает 2.4G, wlan2 на 5G, оба задействованы для локальной домашней сети, для сети УД создан дополнительный виртуальный WLAN интерфейс wlan-smarthome работающий на 2.4G. Порт SFP мы, как и ранее, рассматривать не будем, но по необходимости его можно задействовать в своих нуждах. В конечном итоге конфигурация должна быть следующей:




  • Порт ether1 — trunk порт на первое устройство, vlan18 tagged, vlan22 tagged
  • Bridge 18, IP адрес 192.168.18.2, ethernet порты 2 — 5, виртуальный интерфейс wlan 2.4G, vlan18 untagged — сеть умного дома
  • Bridge 22, IP адрес 192.168.22.2, основные wlan интерфейсы 2.4G и 5G, vlan22 untagged — домашняя локальная сеть




Переименовываем порт ether1 в ether1-trunk, что бы было понятнее:




/interface ethernet set ether1 name="ether1-trunk"




Создаем vlan18 и vlan22 с соответствующими VLAN ID, оба вешаем на порт ether1-trunk, трафик на этом порту будет Tagged.




/interface vlan add name="vlan18" vlan-id=18 interface=ether1-trunk
/interface vlan add name="vlan22" vlan-id=22 interface=ether1-trunk




Создаем бриджи для двух сетей и назначаем им адреса, добавляем порты и VLAN’ы в соответствующие бриджи, трафик на портах бриджа будет Untagged.




/interface bridge add name="bridge18"
/interface bridge add name="bridge22"

/ip address add address=192.168.18.2 interface=bridge18
/ip address add address=192.168.22.2 interface=bridge22

/interface bridge port add bridge=bridge18 interface=ether2
/interface bridge port add bridge=bridge18 interface=ether3
/interface bridge port add bridge=bridge18 interface=ether4
/interface bridge port add bridge=bridge18 interface=ether5
/interface bridge port add bridge=bridge18 interface=wlan-smarthome
/interface bridge port add bridge=bridge18 interface=vlan18

/interface bridge port add bridge=bridge22 interface=wlan1
/interface bridge port add bridge=bridge22 interface=wlan2
/interface bridge port add bridge=bridge22 interface=vlan22




Теперь весь трафик, исходящий с устройства подключенного к RB962 направленный на устройство, подключенное к RB4011 сначала попадает в бридж, далее в порт ether1-trunk, тегируется соответствующим VLAN ID, попадает в порт ether10-trunk на RB4011, снимается тег VLAN ID, попадает в соответствующий бридж и затем в устройство назначения.




Настройка Firewall описана не будет, т.к. это уже материал для отдельной статьи.




Источник: https://stupidhouse.info/node/15



2021-03-07T01:25:37
Network

Как установить и настроить WireGuard в Kali Linux

WireGuard — это простой и быстрый сервис VPN-туннелирования с открытым исходным кодом, созданный с использованием передовых криптографических технологий. Его очень легко настроить и использовать, и многие считают его лучше, чем OpenVPN или IPSec. WireGuard также является кроссплатформенным и поддерживает встроенные устройства. Читать

Как использовать Django Channel

Django — это популярная среда Python, используемая для разработки веб-приложений с использованием спецификаций сервера WGSI (интерфейс шлюза веб-сервера) и ASGI (интерфейс шлюза асинхронного сервера). WGSI используется для разработки синхронных приложений Python, а AGSI используется для разработки асинхронных и синхронных веб-приложений. Канал — это полезная функция Django, которая используется для обработки WebSocket, протокола чата и т. д. Наряду с протоколом HTTP. Канал построен по спецификации сервера ASGI. Сеанс двусторонней интерактивной связи между браузером пользователя и сервером можно открыть с помощью WebSocket. Клиент инициирует соединение WebSocket, и сервер отвечает согласием или закрыть сообщение. Сообщения WebSocket проталкиваются в канал с помощью производителей и отправляются потребителям, которые прослушивают канал. В этой статье показано, как использовать каналы для обработки сообщений WebSocket.

 

Предпосылки

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

  • Установите Django версии 3+ на Ubuntu 20+ (желательно)
  • Создайте проект Django
  • Запустите сервер Django, чтобы проверить, правильно ли он работает.

 

Настроить приложение Django

Выполните следующую команду, чтобы создать приложение Django с именем socketapp:

$ python3 manage.py startapp socketapp

 

Выполните следующую команду, чтобы установить канал:

$ pip install channels

 

Добавьте каналы и имя приложения в часть INSTALLED_APP файла settings.py :

INSTALLED_APPS = [

…..

'channels',

'socketapp'

]

 

Определите значение ASGI_APPLICATION в файле settings.py :

ASGI_APPLICATION = ‘channel_pro.asgi.application’

 

Создайте папку с именем templates внутри папки socketapp и установите расположение шаблона приложения в части TEMPLATES файла settings.py :

TEMPLATES = [

{

….

'DIRS': ['/home/fahmida/channel_pro/socketapp/templates'],

….

},

]

Следующий вывод появится в терминале после запуска сервера Django. Выходные данные показывают, что работает ASGI/Channels версии 3.0.3.

Создайте файл шаблона с именем index.html в определенном месте шаблона для отображения данных, отправленных WebSocket. Объект сокета, созданный с помощью JavaScript, будет считывать данные с помощью метода JSON.parse(), а затем передавать значение в содержимое тега <h1>, который содержит значение идентификатора, msg.

<!DOCTYPE html>

<html lang=»en»>

<head>

<meta charset=»UTF-8″>

<title>Учебники по каналу Django</title>

<script>

socket = new WebSocket(«ws://localhost:8000/msg/»);

socket.onmessage = function(e) {

var data = JSON.parse(e.data);

document.querySelector(‘#msg’).innerText = data.timeValue;

}

</script>

</head>

<body>

<center>

<h1 style=»color:blue» id =»msg»>{{ text }}</h1>

</center>

</body>

</html>

 

Измените views.py файл в socketapp со следующим содержанием. Index.html файл шаблона будет отображаться в браузере с текстом переменной, когда метод index() этого сценария вызывается из urls.py файла. Если сообщение не передается из сокета, в браузере будет отображаться текст «AndreyEx».

views.py

# Импортировать модуль рендеринга из Django

from django.shortcuts import render



# Создать функцию индекса для отображения HTML-файла в браузере

def index(request):

return render(request, "index.html", context={'text': 'AndreyEx'})

 

Измените urls.py файл в socketapp со следующим содержанием. В скрипте определены два пути: путь admin/ используется для открытия панели администрирования Django, а путь msg/ используется для чтения сообщения WebSocket.

urls.py

from django.contrib import admin

from django.urls import path



from socketapp import views



urlpatterns = [

path('admin/', admin.site.urls),

path('msg/', views.index)

]

Когда следующий URL-адрес выполняется без определения файлов-потребителей и файлов маршрутизации, протокол HTTP будет работать, и появится следующий вывод.

http://localhost:8000/msg/

 

Теперь создайте файл consumer.py внутри папки socketapp с помощью следующего скрипта. Метод connect() для ws_consumer будет использоваться для приема подключения к сокету, чтения текущего значения времени каждую секунду и отправки текущего времени в формате JSON через WebSocket, когда этот метод вызывается из файла маршрутизации.

consumers.py

# Импортировать модуль JSON

import json

# Импортировать WebsocketConsumer

from channels.generic.websocket import WebsocketConsumer

# Импортировать модуль datetime

from datetime import datetime

# Импортировать модуль sleep

from time import sleep





# Определить класс потребителя для отправки данных через

class ws_consumer(WebsocketConsumer):

def connect(self):

self.accept()

while(True):

now = datetime.now()

self.send(json.dumps({'timeValue': now.strftime("%H:%M:%S")}))

sleep(1)

 

Создайте routing.py внутри папки socketapp с помощью следующего скрипта. Путь msg/ определен в сценарии для вызова потребителя для отправки данных в сокет.

routing.py

from django.urls import path

from.consumers import ws_consumer



# Задайте путь для вызова потребителя

ws_urlpatterns = [

path('msg/', ws_consumer.as_asgi())

]

 

Измените файл asgi.py с помощью следующего сценария. Модули, необходимые для обработки запросов HTTP и WebSocket, импортируются в сценарий.

asgi.py

# Импортировать модуль os

import os

# Импортировать get_asgi_application для обработки протокола http

from django.core.asgi import get_asgi_application

# Import ProtocolTypeRouter и URLRouter для установки маршрутизации веб-сокетов

from channels.routing import ProtocolTypeRouter, URLRouter

# Import AuthMiddlewareStack для обработки веб-сокета

from channels.auth import  AuthMiddlewareStack

# Импортировать маршрутизацию веб-сокетов

from socketapp.routing import ws_urlpatterns



# Назначьте значение для DJANGO_SETTINGS_MODULE

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'channel_pro.settings')



# Определить переменные приложения для обработки HTTP и WebSocket

application = ProtocolTypeRouter({

'http': get_asgi_application(),

'websocket': AuthMiddlewareStack(URLRouter(ws_urlpatterns))



})

 

Теперь снова запустите следующий URL-адрес из браузера, чтобы прочитать данные из WebSocket.

http://localhost:8000/msg/

 

Если потребитель и маршрутизатор работают правильно, в браузере будут отображаться следующие цифровые часы. Здесь маршрутизатор отправил запрос WebSocket, используя путь msg/ к потребителю, который принял запрос и отправил данные в шаблон, чтобы показать цифровые часы в браузере, где второе значение текущего времени обновляется каждые второй.

 

Вывод

В этом руководстве показано, как реализовать приложение реального времени с использованием инфраструктуры и каналов Django, создав простые цифровые часы. Другие типы приложений реального времени также могут быть реализованы с использованием Django и каналов, таких как системы онлайн-чата. Скрипты, используемые в этой статье, работают только с Django версии 3+ и Channel версии 3+. Итак, если вы используете более раннюю версию Django или Channel, вам нужно будет обновить версию перед тестированием скрипта, представленного в этом руководстве.



2021-03-06T10:29:34
Python