Фото

Добавить программу в автозапуск с помощью Python


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

В данной статье мы рассмотрим, как использовать Python для добавления программ в автозапуск на различных операционных системах. Вы узнаете, как можно реализовать автозапуск на Windows и Linux, используя Python-библиотеки и стандартные подходы.

Что такое автозапуск программ?

Автозапуск представляет собой возможность автоматического запуска определенных приложений или скриптов при включении и загрузке операционной системы. Программы, запускаемые таким образом, могут быть самыми разнообразными — от почтовых клиентов до системных утилит. Возможность автоматического старта повышает удобство использования устройства, обеспечивая готовность системы к работе с первой минуты.

Подходы к добавлению программ в автозапуск

Существует несколько различных методов добавления приложений в автозапуск в операционных системах Windows и Linux. Способ выбора зависит от специфики ОС и возможностей разработчика. Мы сфокусируемся на подходах, где задействован язык Python, благодаря которому весь процесс станет интуитивно понятным и универсальным.

Установка необходимых библиотек

Python и pip

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

Библиотеки для работы с автозапуском

Мы будем использовать стандартные Python модули os и platform, чтобы обеспечить взаимодействие с файловой системой и определить текущую ОС. Эти модули идут в комплекте с Python, поэтому требуются лишь базовые установки языка.

Код для добавления программы в автозапуск

Добавление в автозапуск на Windows

Код для добавления программы в автозапуск на Windows создаёт символьную ссылку в специальной папке:

import os
import sys

def add_to_startup(program_name: str) -> None:
    """
    Добавляет программу в автозапуск Windows.
    :param program_name: Имя программы для автозапуска
    """
    startup_path = os.path.join(os.getenv('APPDATA'), 'Microsoft', 'Windows', 'Start Menu', 'Programs', 'Startup')
    target_link = os.path.join(startup_path, f'{program_name}.lnk')
    os.symlink(sys.argv[0], target_link)

 

Код выше создает символическую ссылку в каталоге автозапуска Windows, что позволяет программе запускаться автоматически.

Добавление в автозапуск на Linux

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

 

import os

def add_to_startup(command: str) -> None:
    """
    Добавляет команду в автозапуск на Linux.
    :param command: Команда для автозапуска
    """
    autostart_file = f'~/.config/autostart/{command}.desktop'
    with open(os.path.expanduser(autostart_file), 'w') as file:
        file.write(f'[Desktop Entry]\nType=Application\nExec={command}\nHidden=false\nNoDisplay=false\nX-GNOME-Autostart-enabled=true\nName[en_US]={command}\nName={command}\n')

 

Этот фрагмент создает файл конфигурации автозапуска подходящего формата для среды рабочего стола GNOME.

Проверка, добавлена ли программа в автозапуск

 

Проверка на Windows

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

Проверка на Linux

На Linux правильность работы можно проверить, исследовав .desktop файл на наличие ошибок в синтаксисе и правильную настройку прав доступа.

 

Типичные ошибки и их исправление

 

Общие ошибки при добавлении в автозапуск

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

Отладка с помощью логов

Использование модулей логирования поможет вам отследить ошибки на этапе разработки и быстро выявить проблемные места. Консольный вывод и логи могут быть полезны при попытке воспроизвести ошибку.

 

Заключение

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

 
 
Источник:  external.software


Фото

Парсинг сайтов - Regex в Beautiful Soup


В мире веб-скрапинга и анализа данных, эффективный поиск и извлечение информации из HTML/XML документов имеют решающее значение. Beautiful Soup — это мощная библиотека Python, которая значительно упрощает этот процесс.

Однако стандартные методы поиска Beautiful Soup иногда могут быть недостаточными для сложных или изменчивых структур веб-страниц. Именно здесь на помощь приходят регулярные выражения (Regex).

В этом руководстве мы подробно рассмотрим, как интегрировать Regex с Beautiful Soup, чтобы значительно расширить ваши возможности поиска. Мы начнем с основ и перейдем к продвинутым техникам, предоставляя практические примеры для решения реальных задач веб-скрапинга.

Основы Beautiful Soup и регулярных выражений

Beautiful Soup — это библиотека Python для парсинга HTML и XML документов. Она преобразует сложные веб-страницы в легкодоступную структуру данных, позволяя извлекать информацию с помощью интуитивно понятных методов поиска, навигации и модификации.

Регулярные выражения (Regex) — это мощный инструмент для работы со строками, позволяющий описывать и находить текстовые шаблоны. Они становятся незаменимыми, когда стандартные методы поиска Beautiful Soup оказываются недостаточными для обнаружения элементов со сложными или меняющимися характеристиками.

Что такое Beautiful Soup и зачем он нужен

Beautiful Soup – это мощная библиотека Python, разработанная для парсинга HTML и XML документов. Она преобразует сложные веб-страницы в удобные для навигации Python-объекты, формируя синтаксическое дерево. Это позволяет разработчикам легко извлекать данные, находить элементы и манипулировать их содержимым. Beautiful Soup значительно упрощает процесс веб-скрапинга, предоставляя интуитивно понятные методы для навигации по структуре страницы, поиска тегов, атрибутов и текста, делая ее незаменимым инструментом для автоматизированного сбора информации из веба.

Введение в регулярные выражения (Regex) для поиска

Регулярные выражения (Regex) – это мощный инструмент для поиска и манипулирования текстом, основанный на использовании шаблонов. В контексте Beautiful Soup, Regex позволяет находить элементы, соответствующие определенным текстовым паттернам, а не только точным совпадениям.

  • Определение шаблонов: Regex определяет шаблоны, описывающие искомые строки. Например, шаблон r'^[A-Za-z]+$' ищет строки, состоящие только из букв.

  • Модуль re в Python: Для работы с Regex в Python используется встроенный модуль re. Beautiful Soup интегрируется с этим модулем, позволяя применять Regex для поиска по тегам, атрибутам и тексту.

  • Преимущества Regex: Regex обеспечивает гибкий и точный поиск, позволяя игнорировать регистр, находить элементы с определенными префиксами или суффиксами и многое другое. Это особенно полезно при работе с неструктурированными или динамически генерируемыми веб-страницами.

  • Примеры использования: Regex можно использовать для поиска всех ссылок, начинающихся с определенного домена, или для извлечения всех тегов <div> с атрибутом class, содержащим определенное слово.

Поиск элементов с помощью Regex в Beautiful Soup

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

Использование Regex в методах find() и find_all()

Методы find() и find_all() принимают объект Regex в качестве аргумента для поиска по тегам, атрибутам и тексту. Для этого необходимо передать скомпилированный объект регулярного выражения, созданный с помощью re.compile(), или строку, представляющую шаблон регулярного выражения, непосредственно в метод.

  • find(regex): Возвращает первый элемент, соответствующий заданному регулярному выражению.

  • find_all(regex): Возвращает список всех элементов, соответствующих заданному регулярному выражению.

Поиск по имени тега и тексту с использованием Regex

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

Пример:

import re
from bs4 import BeautifulSoup

html_doc = """<a>Link 1</a><b>Bold text</b>
<a>Link 2</a>"""
soup = BeautifulSoup(html_doc, 'html.parser')

links = soup.find_all(re.compile('^a')) # Найти все теги, начинающиеся с 'a'
print(links)

text = soup.find_all(text=re.compile('Link')) # Найти текст, содержащий 'Link'
print(text)

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

Использование Regex в методах find() и find_all()

Методы find() и find_all() в Beautiful Soup становятся мощнее с использованием регулярных выражений. Вместо точного совпадения строки, вы можете искать элементы, соответствующие определенному шаблону.

  • find(regex) возвращает первый элемент, соответствующий шаблону.

  • find_all(regex) возвращает все элементы, соответствующие шаблону, в виде списка.

Regex можно использовать для поиска:

  1. По содержимому тега (тексту).

  2. По имени тега.

  3. По атрибутам тега (будет рассмотрено далее).

Пример:

from bs4 import BeautifulSoup
import re

html = '<p class="body">Текст 1</p><p class="body">Текст 2</p>'
soup = BeautifulSoup(html, 'html.parser')

# Найти все элементы <p> с классом, содержащим "body"
body_elements = soup.find_all('p', class_=re.compile('body'))

for element in body_elements:
    print(element.text)

 

В этом примере re.compile('body') создает regex-объект, который ищет в атрибуте class значения, содержащие слово "body".

Поиск по имени тега и тексту с использованием Regex

Beautiful Soup позволяет использовать регулярные выражения не только для поиска по атрибутам, но и непосредственно для фильтрации тегов и их содержимого.

  • Поиск по имени тега: Вместо точного имени тега можно передать regex. Beautiful Soup найдет все теги, имена которых соответствуют этому регулярному выражению. Например, <soup.find_all(re.compile('^b'))> найдет все теги, начинающиеся с буквы ‘b’ (body, b и т.д.).

  • Поиск по тексту: Аргумент string в методах find() и find_all() принимает регулярные выражения. Это позволяет находить элементы, содержащие текст, соответствующий заданному шаблону. Например, <soup.find_all(string=re.compile('hello'))> найдет все элементы, содержащие текст "hello" (регистрозависимо).

При использовании regex для поиска текста важно помнить о следующем:

  • Beautiful Soup вернет объект NavigableString, представляющий найденный текст, а не сам тег.

  • Чтобы получить родительский тег, можно использовать свойство parent объекта NavigableString.

Использование regex в сочетании с именами тегов и текстовым поиском предоставляет мощные инструменты для точного и гибкого извлечения информации из HTML/XML документов.

Продвинутые техники поиска

Теперь, когда мы освоили основы, давайте перейдем к продвинутым техникам. В этом разделе мы рассмотрим, как использовать регулярные выражения для поиска элементов по атрибутам, а также как применять re.compile() для создания сложных и эффективных запросов. Это расширит ваши возможности по извлечению данных из HTML и XML документов, предоставляя большую гибкость и контроль над процессом поиска.

Поиск по атрибутам с использованием Regex

Beautiful Soup позволяет искать элементы HTML не только по тегам и тексту, но и по значениям атрибутов, используя регулярные выражения.

Например, чтобы найти все теги <a> с атрибутом href, содержащим слово "example", можно использовать следующий код:

import re
from bs4 import BeautifulSoup

html = '''
<a href="https://www.example.com">Example Link</a>
<a href="https://www.google.com">Google Link</a>
<a href="https://example.org">Another Example</a>
'''

soup = BeautifulSoup(html, 'html.parser')

links = soup.find_all('a', href=re.compile(r'example'))

for link in links:
    print(link['href'])

 

В этом примере re.compile(r'example') создает объект регулярного выражения, который используется для поиска соответствий в атрибуте href. Этот метод особенно полезен, когда необходимо найти атрибуты, соответствующие определенному шаблону, а не конкретному значению.

Использование функций и re.compile() для сложных запросов

Для повышения эффективности при частом использовании одного и того же сложного шаблона рекомендуется применять re.compile(). Это предварительно компилирует регулярное выражение, оптимизируя процесс поиска. Beautiful Soup также позволяет передавать пользовательские функции в методы find() и find_all() для реализации кастомной логики фильтрации элементов, предоставляя максимальную гибкость.

Практические примеры и лучшие практики

Regex в Beautiful Soup открывает широкие возможности для веб-скрапинга. Рассмотрим несколько примеров:

  1. Извлечение данных по шаблону: Например, извлечение всех ссылок с определенным словом в URL.

  2. Работа с динамическим контентом: Парсинг атрибутов, значения которых генерируются динамически.

  3. Очистка данных: Удаление нежелательных символов или форматирование текста.

Лучшие практики:

  • Компилируйте regex с помощью re.compile() для повышения производительности.

  • Используйте try-except блоки для обработки возможных ошибок, связанных с некорректным HTML.

  • Будьте внимательны к edge cases и тщательно тестируйте свои regex.

Решение типовых задач веб-скрапинга с Regex

Рассмотрим несколько типичных задач веб-скрапинга, где Regex демонстрирует свою мощь в Beautiful Soup:

  1. Извлечение цен с веб-сайта: Если цены представлены в разных форматах (например, $100100 USD100.00), Regex поможет извлечь их все, приводя к единому формату.

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

  3. Парсинг таблиц с неконсистентными данными: Когда структура таблицы непостоянна, Regex может помочь идентифицировать и извлечь нужные данные, даже если они расположены в разных ячейках.

  4. Извлечение данных из атрибутов тегов: Regex позволяет находить элементы, у которых значения атрибутов соответствуют заданному шаблону, например, id="item-[0-9]+".

Использование Regex в Beautiful Soup позволяет решать широкий спектр задач, связанных с извлечением и обработкой данных из HTML и XML документов, значительно расширяя возможности стандартных методов поиска.

Оптимизация и распространенные ошибки

Для оптимизации поиска с Regex в Beautiful Soup всегда старайтесь сужать область поиска, применяя его к поддеревьям HTML, а не ко всему документу. Это значительно ускоряет обработку. Распространенные ошибки включают использование слишком широких регулярных выражений, что приводит к ложным срабатываниям, и забывание обработки случая, когда find() возвращает None.

Заключение

В этом исчерпывающем гиде мы детально изучили, как регулярные выражения значительно расширяют возможности Beautiful Soup для поиска и извлечения данных. Освоив комбинацию этих мощных инструментов, вы сможете эффективно решать самые сложные задачи веб-скрейпинга, делая ваш код более гибким, точным и производительным. Применяя рассмотренные методы, вы поднимете свои навыки парсинга на новый уровень.

 
 
 
 


Фото

Установка Unity3d в Ubuntu 25.10


Unity3D уже давно занимает лидирующие позиции в индустрии разработки игр, позволяя разработчикам создавать захватывающие 2D- и 3D-игры для широкого спектра платформ. Хотя Windows и macOS традиционно являются основными платформами для разработки на Unity, Linux постепенно набирает популярность как жизнеспособная платформа для разработки игр. В этой статье мы подробно рассмотрим как установить Unity3D в Ubuntu 25.10.

Для начала необходимо убедиться, что ваша система соответствует минимальным требованиям:

- 64-разрядная версия дистрибутива Linux.

- Не менее 4 ГБ оперативной памяти.

- Видеокарта с поддержкой OpenGL 3.2 или более поздней версии.

- Mono (кроссплатформенная реализация.NET Framework), установленная в вашей системе.

Первым шагом установим Mono, если он еще не установленю.

 

              sudo apt update

              sudo apt -y install mono-complete

 

Теперь необходимо установить Unity Hub.

Unity Hub — это отдельное приложение, которое упрощает навигацию, загрузку и управление проектами и установками Unity.

С помощью Hub вы можете:

- Управлять, загружать и устанавливать модули и версии Unity Editor.

- Создавать проекты Unity и управлять ими.

- Изучать шаблоны, примеры проектов и учебных материалов для разных уровней подготовки.

- Управлять профилем, настройками и лицензиями Unity.

- Отправлять отзывы и получать помощь от Unity.

 

1. Чтобы установить Unity Hub в дистрибутив Linux Debian или Ubuntu, вам нужно добавить репозиторий Unity Hub Debian вместе с открытым ключом для проверки целостности пакетов.

 

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

 

wget -qO - https://hub.unity3d.com/linux/keys/public | gpg --dearmor | sudo tee /usr/share/keyrings/Unity_Technologies_ApS.gpg > /dev/null

 

2. Чтобы добавить репозиторий Unity Hub, вам нужно внести изменения в /etc/apt/sources.list.d. Выполните следующую команду, чтобы добавить репозиторий Unity Hub:

 

sudo sh -c 'echo "deb [signed-by=/usr/share/keyrings/Unity_Technologies_ApS.gpg] https://hub.unity3d.com/linux/repos/deb stable main" > /etc/apt/sources.list.d/unityhub.list'


3. Обновите кэш пакета и установите пакет:

 

sudo apt update

sudo apt -y install unityhub

 

Всё теперь запускаем UnityHub командой:      unityhub

и выбираем пункт installs, для установки нужного нам Unity Editor.

 

Выбираем нужную нам версию и нажимаем кнопку install.

 

 

Далее выбираем необходимые компоненты и нажимаем install:

 

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

 

После окончания установки попробуем создать проект, для этого переходим в пункт меню Proects.

 

Далее нажимаем New project.

 

Здесь выбираем нужный нам шаблон, заполняем все поля и нажимаем кнопку Create project.

 

 

Если всё установилось корректно, то запуститься Unity Editor и можно приступать к написанию своего проекта.

Но когда я все установил, то мой проект ни как не мог запуститься, вернее не запускался сам Unity Editor, а кликнув по созданному объекту появлялось сообщение, что проект уже якобы запущен в Unity Editor, хотя сам редактор запущен не был.

 

 

Попробуем решить эту проблему.

Сам Unity Editor в Ubuntu 25.10 по умолчанию устанавливается в домашнюю папку примерно по такому пути:

 ~/Unity/Hub/Editor/2022.3.62f3/Editor/

Теперь отроем терминал и перейдем в этот каталог:

cd /home/maxim/Unity/Hub/Editor/2022.3.62f3/Editor/

Запускаем Unity Editor:

 ./Unity

И получаем вот такую ошибку:

./Unity: error while loading shared libraries: libxml2.so.2: cannot open shared object file: No such file or directory

Здесь мы видим, что у нас якобы нет библиотеки libxml2.so.2.

Проверим так ли это на самом деле. Попробуем её найти у нас в системе:

sudo ldconfig -p | grep libxml2

В итоге видим, что она у нас установлена, но Unity Editor упорно не хочет её находить.

 

Unity Editor требует libxml2.so.2, но у нас в системе установлена libxml2.so.16, которая находиться по пути: /lib/x86_64-linux-gnu/libxml2.so.16

Сделаем символическую ссылку на этот файл:

 

 sudo ln -s /lib/x86_64-linux-gnu/libxml2.so.16 /lib/x86_64-linux-gnu/libxml2.so.2

 

Теперь мы убедимся, что все необходимые зависимости у нас установлены в системе, и если каких-либо не хватает, то доустанавливаем их, либо если они установлены но на них нет символической ссылки, то создаем её по примеру описанному выше.

Набираем в терминале:

 

sudo ldd ./Unity

В появившемся списке смотрим каких зависимостей не хватает (=> not found). Если всё установлено, то пытаемся еще раз запустить unityhub (если мы не закрыли его после первого запуска, то необходимо его закрыть и только потом перезапустить). Снова создаем проект, запускаем его и вуаля Unity Editor запустился.

 

 

Вот и всё, можем работать в Unity3D в Ubuntu 25.10

 

 

 

 



Фото

Qt: клик мышью по объекту.


Нередко возникают ситуации, когда нам необходимо узнать по какому объекту на экране кликнули мышью и после ожидать от этого объекта определенные действия. Но оригинальные объекты, созданные, например, с помощью класса QLabel, не имеют возможности реагировать на нажатия кнопок мышки. Как быть в такой ситуации и как определить по какому объекту кликнули? Это мы рассмотрим в данной статье.

Объект созданный на основе класса QLabel не испускает сигнала clicked(), соответственно не имеет возможности реагировать на нажатия кнопки мышки. Можно, конечно сделать объект на основе класса QPushButton, но тогда придется изрядно повозиться, чтобы сделать этот объект похожим на QLabel со всеми его методами и свойтвами.

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

Для наглядности напишем программу, где в окне расположим три текстовые метки QLabel разных цветов (синяя, красная и зеленая), а в четвертой метке, которая представляет собой простое текстовое поле будем выводить результат, по какому объекту кликнули мышью, при чем после клика выбранный объект будет уничтожаться.

Итак, создадим файл main.cpp.

 

main.cpp:

#include "mainwindow.h"

#include <QApplication>

int main(int argc, char *argv[])

{

QApplication a(argc, argv);

MainWindow w;

w.show();

return a.exec();

}

 

Теперь мы напишем свой класс-наследник QLabel, реагирующий на клики мышки.

 Пишем заголовочный файл:

mylabel.h:

#ifndef MYLABEL_H

#define MYLABEL_H

#include <QObject>

#include <QWidget>

#include <QLabel>

#include <QMouseEvent>

class MyLabel : public QLabel // Наследуемся от класса QLabel

{

Q_OBJECT

public:

explicit MyLabel(QWidget *parent = nullptr);

signals:

void clicked(QMouseEvent *); // Предусматриваем обработку сигнала clicked()

private:

protected:

void mousePressEvent (QMouseEvent *event);

};

endif // MYLABEL_H

 

Назовем наш класс — MyLabel и унаследуем его от класса QLabel. В файле mylabel.h предусматриваем обработку сигнала clicked(), а также обработку событий мыши mousePressEvent(QMouseEvent *event). Теперь напишем файл mylabel.cpp.

 

mylabel.cpp:

#include "mylabel.h"

MyLabel::MyLabel(QWidget *parent)

: QLabel{parent}

{}

void MyLabel::mousePressEvent(QMouseEvent *event)

{

emit clicked(event);

}

 

В файле mylabel.cpp мы написали обработчик событий мыши при нажатии клавиши mousePressEvent(QMouseEvent *event), который искусственно посылает сигнал clicked().

Вот, в принципе, и вся хитрость. Теперь попробуем всё это применить в нашей программе с кликом по меткам разных цветов. Напишем заголовочный файл mainwindow.h.

 

mainwindow.h:

#ifndef MAINWINDOW_H

#define MAINWINDOW_H

#include <QMainWindow>

#include "mylabel.h"

class MainWindow : public QMainWindow

{

Q_OBJECT

public:

MainWindow(QWidget *parent = nullptr);

~MainWindow();

private:

MyLabel *redLabel = nullptr; // Красная метка

MyLabel *greenLabel = nullptr; // Зеленая метка

MyLabel *blueLabel = nullptr; // Синяя метка

MyLabel *textLabel = nullptr; // Поле где будут выводится сообщения

};

#endif // MAINWINDOW_H

 

Теперь напишем файл mainwindow.cpp, где реализуем всё задуманное. По клику мышки по метке, она будет уничтожена, а в текстовом поле будет выведена информация о том метка какого цвета была уничтожена. Если кликнем по текстовому полю, то будет выведена соответствующая этому информация.

 

mainwindow.cpp:

#include "mainwindow.h"

MainWindow::MainWindow(QWidget *parent)

: QMainWindow(parent)

{

this->resize(640,480); // Изменяем размеры окна

// Создаем красную метку

redLabel = new MyLabel(this);

redLabel->resize(100,100);

redLabel->move(50,300);

redLabel->setStyleSheet("background-color: red;");

redLabel->show();

// Создаем зеленую метку

greenLabel = new MyLabel(this);

greenLabel->resize(100,100);

greenLabel->move(250,300);

greenLabel->setStyleSheet("background-color: green;");

greenLabel->show();

// Создаем синюю метку

blueLabel = new MyLabel(this);

blueLabel->resize(100,100);

blueLabel->move(450,300);

blueLabel->setStyleSheet("background-color: blue;");

blueLabel->show();

// Создаем текстовое поле для вывода информации

textLabel = new MyLabel(this);

textLabel->resize(400,60);

textLabel->move(120, 100);

textLabel->setStyleSheet("background-color: lightyellow; font-size: 16px;");

textLabel->show();

 // Обрабатываем сигналы clicked() испускаемые метками в лямбда функции

connect(redLabel, &MyLabel::clicked, this, [this]()

{

delete redLabel;

redLabel = nullptr;

textLabel->setText("Уничтожена красная метка !!!");

});

connect(greenLabel, &MyLabel::clicked, this, [this]()

{

delete greenLabel;

greenLabel = nullptr;

textLabel->setText("Уничтожена зеленая метка !!!");

});

connect(blueLabel, &MyLabel::clicked, this, [this]()

{

delete blueLabel;

blueLabel = nullptr;

textLabel->setText("Уничтожена синяя метка !!!");

});

connect(textLabel, &MyLabel::clicked, this, [this]()

{

textLabel->setText("Вы кликнули по текстовому полю !!!");

});

}

MainWindow::~MainWindow()

{

delete textLabel;

textLabel = nullptr;

delete blueLabel;

blueLabel = nullptr;

delete greenLabel;

greenLabel = nullptr;

delete redLabel;

redLabel = nullptr;

}

 

Вот и всё, ниже приводятся скрины результата работы программы:

Поочередно кликаем мышкой по зеленой метке, текстовому полю, красной метке, синей метке:

 

Окно программы:

Кликаем по зеленой метке:

Кликаем по текстовому полю:

Кликаем по красной метке:

Кликаем по синей метке:

 

 



Фото

NMAP - инструмент сканирования сети


Nmap - это очень популярный сканер сети с открытым исходным кодом, который может использоваться как в Windows, так и в Linux. Программа Nmap или Network Mapper была разработана Гордоном Луоном и на данный момент используется специалистами по безопасности и системными администраторами по всему миру.

Nmap, или Network Mapper, — это бесплатный инструмент с открытым исходным кодом, созданный для сканирования сетей, портов и сервисов. За несколько десятилетий своего существования Nmap стал практически стандартом в области анализа сети. С его помощью можно находить активные хосты, открытые порты, выяснять версию сервисов и даже определять операционные системы.

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

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

Например, с помощью скриптов можно автоматически обнаруживать новые уязвимости безопасности в вашей сети. Nmap может использоваться с хорошими и плохими намерениями, будьте аккуратны, чтобы не использовать nmap против закона. В этой статье мы рассмотрим как пользоваться nmap для сканирования портов в операционной системе Linux, хотя всё это применимо и в Windows.

Какие задачи решает Nmap

Прежде чем приступить к практике, давайте кратко перечислим, для чего вообще используют Nmap:

  • Сканирование портов: поиск открытых, фильтрованных и закрытых портов на хостах.
  • Определение операционной системы: на основе особенностей сетевых ответов Nmap пытается угадать, под управлением какой ОС работает цель.
  • Аудит безопасности: выявление уязвимых служб и потенциально опасных конфигураций.
  • Картирование сети: определение топологии сети, построение карты устройств, анализ пропускных способностей.
  • Выявление сервисов и их версий: Nmap может «допрашивать» сервисы для определения их версии и сопутствующих сведений, например названия ПО или номера сборки.
  • Автоматизация сканирования: благодаря встроенному механизму скриптов (NSE – Nmap Scripting Engine) можно проводить целый комплекс проверок.

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

Установка и базовые требования

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

Установка в Linux

Если вы используете популярные дистрибутивы на основе Debian/Ubuntu, достаточно ввести в терминале:

sudo apt-get update sudo apt-get install nmap 

На CentOS, Fedora или RHEL:

sudo yum install nmap 

Установка в macOS

Если у вас установлен пакетный менеджер Homebrew, то команда будет выглядеть так:

brew install nmap 

Установка в Windows

Для Windows Nmap доступен в виде установочного пакета (.exe), который можно скачать с официального сайта. После установки сканер будет готов к использованию в командной строке (cmd или PowerShell).

После инсталляции проверьте корректность выполнения, набрав:

nmap -V 

Если вы видите версию и лицензионную информацию — все установлено правильно.

Как работает Nmap?

В компьютерных сетях все подключенные устройства имеют свой ip адрес. Каждый компьютер поддерживает протокол ping, с помощью которого можно определить подключен ли он к сети. Мы просто отправляем ping запрос компьютеру, и если он отзывается, то считаем, что он подключен. Nmap использует немного иной подход. Компьютеры также определенным образом реагируют на те или иные сетевые пакеты, утилита просто отправляет нужные пакеты и смотрит какие хосты прислали ответ.

Но об этом вы, наверное, уже знаете. Более интересно то как Nmap узнает какие сервисы запущены на машине. Суть работы всех сетевых программ основана на портах. Чтобы получить сообщение из сети, программа должна открыть порт на вашем компьютере и ждать входящих соединений. А для отправки сообщения по сети нужно подключиться к уже другой программой (адресатом) порту. Затем программе необходимо будет открыть порт, на котором она будет ждать ответа.

Утилита nmap в процессе сканирования сети перебирает доступный диапазон портов и пытается подключиться к каждому из них. Если подключение удалось, в большинстве случаев, передав несколько пакетов программа может даже узнать версию программного обеспечения, которые ожидает подключений к этому порту. Теперь, после того, как мы рассмотрели основы, рассмотрим как пользоваться nmap для сканирования портов и сети.

Синтаксис Nmap

Команда запуска Nmap очень проста для этого достаточно передать ей в параметрах целевой IP адрес или сеть, а также указать опции при необходимости:

$ nmap опции адрес

Теперь давайте рассмотрим основные опции, которые понадобятся нам в этой статье.

  • -sL - просто создать список работающих хостов, но не сканировать порты nmap;
  • -sP - только проверять доступен ли хост с помощью ping;
  • -PN - считать все хосты доступными, даже если они не отвечают на ping;
  • -sS/sT/sA/sW/sM - TCP сканирование;
  • -sU - UDP сканирование nmap;
  • -sN/sF/sX - TCP NULL и FIN сканирование;
  • -sC - запускать скрипт по умолчанию;
  • -sI - ленивое Indle сканирование;
  • -p - указать диапазон портов для проверки;
  • -sV - детальное исследование портов для определения версий служб;
  • -O - определять операционную систему;
  • -T[0-5] - скорость сканирования, чем больше, тем быстрее;
  • -D - маскировать сканирование с помощью фиктивных IP;
  • -S - изменить свой IP адрес на указанный;
  • -e - использовать определенный интерфейс;
  • --spoof-mac - установить свой MAC адрес;
  • -A - определение операционной системы с помощью скриптов.

Теперь, когда мы рассмотрели все основные опции, давайте поговорим о том, как выполняется сканирование портов nmap.

Как пользоваться Nmap для сканирования портов в Linux

Дальше рассмотрим примеры nmap. Сначала давайте рассмотрим как найти все подключенные к сети устройства, для этого достаточно использовать опцию -sL и указать маску нашей сети. в моем случае это 192.168.1.1/24. Маску вашей локальной сети вы можете найти, выполнив команду:

                $   ip addr show

 

Из вывода для используемого интерфейса возьмите число после слеша, а до слэша укажите ip вашего роутера. Команда на сканирование сети nmap будет выглядеть вот так:

        $   nmap -sL 192.168.1.1/24

 

 

Иногда это сканирование может не дать никаких результатов, потому что некоторые операционные системы имеют защиту от сканирования портов. Но это можно обойти, просто использовав для сканирования ping всех ip адресов сети, для этого есть опция -sn:

        $   nmap -sn 192.168.1.1/24

 

 

Как видите, теперь программа обнаружила активные устройства в сети. Дальше мы можем сканировать порты nmap для нужного узла запустив утилиту без опций:

        $   sudo nmap 192.168.1.1

 

 

Теперь мы можем видеть, что у нас открыто несколько портов, все они используются каким-либо сервисом на целевой машине. Каждый из них может быть потенциально уязвимым, поэтому иметь много открытых портов на машине небезопасно. Но это еще далеко не все, что вы можете сделать, дальше вы узнаете как пользоваться nmap.

Чтобы узнать более подробную информацию о машине и запущенных на ней сервисах вы можете использовать опцию -sV. Утилита подключится к каждому порту и определит всю доступную информацию:

        $   sudo nmap -sV 192.168.1.1

 

 

На нашей машине запущен ftp, а поэтому мы можем попытаться рассмотреть эту службу подробнее с помощью стандартных скриптов nmap. Скрипты позволяют проверить порт более детально, найти возможные уязвимости. Для этого используйте опцию -sC и -p чтобы задать порт:

        $   sudo nmap -sC 192.168.56.102 -p 21

Мы выполняли скрипт по умолчанию, но есть еще и другие скрипты, например, найти все скрипты для ftp вы можете командой:

        $   sudo find /usr/share/nmap/scripts/ -name '*.nse' | grep ftp

Затем попытаемся использовать один из них, для этого достаточно указать его с помощью опции --script. Но сначала вы можете посмотреть информацию о скрипте:

        $   sudo nmap --script-help ftp-brute.nse

 

 

Этот скрипт будет пытаться определить логин и пароль от FTP на удаленном узле. Затем выполните скрипт:

        $   sudo nmap --script ftp-brute.nse 192.168.1.1 -p 21

 

 

В результате скрипт подобрал логин и пароль, admin/admin. Вот поэтому не нужно использовать параметры входа по умолчанию.

Также можно запустить утилиту с опцией -A, она активирует более агрессивный режим работы утилиты, с помощью которого вы получите большую часть информации одной командой:

        $   sudo nmap -A 192.168.1.1

 

 

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

Выводы

В этой статье мы рассмотрели как выполняется сканирование портов nmap, а также несколько простых примеров использования этой утилиты. Эти команды nmap могут быть полезными многим системным администраторам, чтобы улучшить безопасность их систем. Но это далеко не все возможности утилиты. Продолжайте экспериментировать с утилитой чтобы узнать больше только не в чужих сетях!

 

 

Источник:    losst.pro

 

 

 



Фото

Управление памятью в C++


Управление памятью в C++ невероятно эффективно для оптимизации производительности, особенно когда речь идёт о крупных приложениях. Сегодня мы поговорим о преимуществах управления памятью в C++ и познакомим вас с базовыми принципами управления памятью в C++.

Краткое введение в управление памятью

Управление памятью контролирует то, как программа использует память компьютера. Во время выполнения каждая компьютерная программа использует оперативную память (то есть ОЗУ) для хранения временных переменных, структур данных и т. д. Управление использованием памяти включает в себя как выделение, так и освобождение памяти. Выделение памяти — это выделение части оперативной памяти по запросу программы. Освобождение памяти — это освобождение памяти, которая больше не нужна программе.

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

  • Автоматическое управление памятью (например, в Java, Python, C#)
  • Динамическое управление памятью (например, в C++, C)

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

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

Несмотря на то, что это приводит к увеличению времени разработки, динамическое управление памятью позволяет адаптировать потребление памяти приложением и создавать высокопроизводительные приложения. Динамическое управление памятью — единственный возможный вариант, если вы работаете с устройствами с ограниченными ресурсами, например со встроенными устройствами. Оно также важно для поддержания высокой производительности в системах реального времени, поэтому C++ часто используется в разработке игр. Таким образом, язык C++ становится отличным выбором для ситуаций, когда важны производительность и небольшой объём используемой памяти.

Vногие люди до сих пор не решаются изучать динамическое управление памятью в C++. Помимо сложности освоения, существует реальный риск использования неправильных методов, которые могут привести к таким ошибкам, как утечка памяти (о чём мы вскоре поговорим). В некоторых случаях ошибки могут привести к ещё более серьёзным последствиям. Однако не стоит избегать изучения этого ценного навыка. В языке C++ реализовано несколько защитных механизмов и мер безопасности, которые помогают снизить риски, связанные с манипулированием аппаратным обеспечением. Если у вас будет достаточно практики, вы научитесь безопасно использовать управление памятью для прямого взаимодействия с аппаратным обеспечением компьютера и создания высокопроизводительных приложений.

Начало работы с управлением памятью в C++

Основы модели памяти C++

Каждое слово (или блок) памяти обычно состоит из двух, четырёх или восьми байт в зависимости от аппаратной архитектуры. В нашей программе на C++ мы можем обратиться к блоку по его числовому адресу. Адрес первого блока равен 0, а адрес последнего блока зависит от объёма памяти вашего компьютера. На рисунке ниже изображён блок памяти.

 

 

В C++ мы можем разделить память программы на три части:

  1. Статическая область, в которой хранятся статические переменные. Статические переменные — это переменные, которые используются на протяжении всего выполнения программы. Размер статической области не меняется во время выполнения программы на C++.

  2. Стек, в котором хранятся фреймы стека. Для каждого вызова функции создаётся новый фрейм стека. Фрейм стека — это блок данных, который содержит локальные переменные соответствующей функции и уничтожается (выталкивается) при возврате из функции.

  3. Куча, в которой хранится динамически выделяемая память. Для оптимизации использования памяти куча и стек обычно растут навстречу друг другу, как показано на следующем рисунке.

 

 

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

В C++ блок памяти — это непрерывный массив байтов, где каждый байт имеет уникальный адрес.

Мы можем управлять памятью в C++ с помощью двух операторов:

  • new оператор для выделения блока памяти в куче
  • delete оператор для освобождения блока памяти из кучи

В следующем примере кода мы используем два наших оператора для выделения и освобождения памяти:

 

 

Теперь давайте разберёмся, что происходит в предыдущем коде:

  1. new Оператор резервирует место в памяти, где может храниться целое число C++ (то есть 4 байта). Затем он возвращает адрес вновь выделенной памяти.
  1. Мы создаём указатель ptr для хранения адреса памяти, возвращаемого оператором new .

 

 

  1. Мы сохраняем целочисленное значение по вновь выделенному адресу памяти с помощью *ptr=5.

 

 

  1. Мы выводим на экран адрес памяти, в котором хранится целое число, и значение целого числа, хранящееся в этой ячейке памяти.
  1. Наконец, мы освобождаем блок памяти, зарезервированный с помощью new использования delete оператора.

 

 

Безопасное использование управления памятью в C++

Использование операторов new и delete требует некоторой осторожности. Они могут привести к ошибкам в работе с памятью. Однако мы можем использовать умные указатели, которые помогут нам более безопасно управлять памятью.

Распространённые ошибки при управлении памятью

При динамическом управлении памятью можно столкнуться с двумя распространёнными ошибками в коде: утечкой памяти и ошибкой сегментации.

Утечки памяти возникают, когда память не освобождается даже после того, как она больше не нужна. Это может привести к тому, что программе не хватит доступной памяти.

 

 

В этом примере кода функция memLeak() выделяет память, но эта память не освобождается. После возврата из функции выделенная память продолжает использоваться, даже если к ней нет доступа.

Ошибка сегментации — ещё одна известная ошибка, связанная с динамическим управлением памятью. Эта ошибка возникает, когда программа обращается к ячейке памяти, которая ей не выделена и не находится в адресном пространстве программы. Адресное пространство — это область памяти, в которой программе разрешено выделять память.

Следующая программа генерирует ошибку сегментации, как только заканчивается адресное пространство:

 

 

Обратите внимание, что ptr++ увеличивает адрес, хранящийся в указателе. Поскольку цикл while выполняется непрерывно, вскоре указатель будет указывать на область за пределами адресного пространства программы, что приведёт к ошибке сегментации. Чтобы избежать ошибок сегментации, мы должны убедиться, что программа не обращается к области памяти, которая ей не выделена.

 

Предотвращение ошибок с помощью умных указателей

 

В C++ предусмотрены различные типы интеллектуальных указателей. Мы называем эти указатели «интеллектуальными», потому что они автоматически освобождаются без явных указаний программиста или сборщика мусора. Хотя интеллектуальные указатели требуют больше ресурсов для работы и занимают больше памяти, чем классические указатели, они помогают уменьшить количество утечек памяти.

Мы немного поговорим об уникальных и общих указателях, а также о некоторых ограничениях интеллектуальных указателей.

Уникальные указатели

Уникальные указатели unique_ptr являются указателями области видимости. Как указатель области видимости, уникальный указатель на определённый объект автоматически освобождается, когда указатель выходит за пределы области видимости.

В качестве примера рассмотрим следующий код, в котором показан уникальный указатель на объект MyClass, созданный в блоке if. Таким образом, областью видимости указателя является блок if. Указатель автоматически освобождается в конце блока if.

 

 

Как следует из их названия, уникальные указатели нельзя копировать. При копировании указателей создаётся несколько указателей на один и тот же объект. Когда любой из этих указателей выходит за пределы области видимости, объект удаляется. Оставшиеся указатели перестают указывать на действительный объект (мы называем их висячими указателями).

На следующем рисунке std::move переключает владение объектом с одного указателя на другой.

 

 

Вместо копирования мы можем использовать функцию std::move для безопасной передачи права владения текущим указателем другомуstd::move показано на предыдущем рисунке. Это можно понять из следующего кода, в котором мы передали право владения объектом MyClass от указателя ptr к ptr2. Будьте осторожны: чтобы избежать ошибки сегментации, предыдущий указатель нельзя использовать после передачи права владения.

В следующем коде показано, как безопасно передать право собственности с помощью функции std::move:

 

 

Общие указатели

Общий указатель std::shared_ptr использует подсчёт ссылок для освобождения памяти. В отличие от уникальных указателей, общий указатель позволяет нескольким указателям указывать на один и тот же объект. Общий указатель ведёт подсчёт каждого указателя, который всё ещё находится в области видимости. Когда указатель выходит из области видимости, счётчик уменьшается. Таким образом, объект автоматически удаляется, когда счётчик ссылок достигает нуля.

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

 

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

Ограничения интеллектуальных указателей

Умные указатели помогают уменьшить количество утечек памяти и освободить память. Однако они не избавляют нас полностью от необходимости вручную освобождать память. Например, на устройстве с ограниченными ресурсами нам может потребоваться вручную освободить память сразу после её последнего использования, даже до того, как указатель выйдет из области видимости.

Следующий код удаляет смарт-указатель вручную:

 

 

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

В следующем примере кода показано использование циклических указателей, при котором общие указатели не могут автоматически освобождать память:

 

 

Используйте все возможности C++ с помощью управления памятью. Хотя на обучение этому навыку требуется некоторое время, управление памятью в C++ — особенно ценный навык для программиста, особенно в свете того, что мы продолжаем двигаться в сторону распределённых систем.



Фото

Как использовать CSS с PHP


Узнайте о различных способах добавления каскадных таблиц стилей (CSS) на ваш сайт с помощью PHP — с примерами кода.

На веб-сайтах, работающих на PHP, HTML-разметка, таблицы стилей CSS и скрипты JavaScript хранятся в PHP-файлах.

Любой код, не заключённый в тег PHP (то есть <?php ?>), не обязательно должен соответствовать синтаксису PHP и будет выведен как статический код в HTML-документе, который сервер генерирует в ответ на запрос браузера.

С другой стороны, код, заключённый в тег PHP, должен соответствовать синтаксису языка PHP и будет динамически выводиться в HTML-файл, загружаемый браузером пользователя.

Другими словами, существует статический и динамический способы добавления CSS с помощью PHP. В оставшейся части статьи мы рассмотрим оба способа.

Статическое добавление CSS с помощью PHP

В PHP-файле вы можете встроить CSS-код в атрибут style="" HTML-элементов, встроить его в тег <style type="text/css"> в заголовке или сослаться на него в теге <link rel="stylesheet">, и он будет выведен без изменений.

Следующий PHP-файл:

<!doctype html>
<html>
    <head>
        <style>
            font-size: 42px;
        </style>
        <link rel="stylesheet" href="style.css">
    </head>
    <body>
        <h1 style="color:blue">Hello, world!</h1>
    </body>
</html>


В результате получится следующая HTML-разметка:

<!doctype html>
<html>
    <head>
        <style>
            font-size: 42px;
        </style>
        <link rel="stylesheet" href="style.css">
    </head>
    <body>
        <h1 style="color:blue">Hello, world!</h1>
    </body>
</html>

Однако это предполагает, что вы пишете только HTML/CSS-код и сохраняете его в PHP-файле. В этом случае вы не используете возможности PHP для динамического изменения вашего сайта.

Динамическое добавление CSS с помощью PHP

Теперь, когда мы рассмотрели статический способ, давайте уделим пару минут обсуждению того, как динамически добавлять CSS-код в HTML-документ.

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

Например, вы можете сохранить значения свойств CSS в переменных PHP, а затем вывести их в HTML-файлах на стороне клиента, чтобы динамически генерировать код CSS при каждом запросе.

 

<?php
$h1_size = "42px";
$h1_color = "blue";
$stylesheet_url = "style.css";
?>
<!doctype html>
<html>
    <head>
    <?php
    echo "<style>
            font-size: {$h1_size}};
        </style>"
        ?>
        <?php
        $url = "style.css";
        echo "<link rel='stylesheet' href='{$stylesheet_url}'>";
        ?>
    </head>
    <body>
        <h1 <?php echo "style='color:blue'" ?>>Hello, world!</h1>
    </body>
</html>
 
 
Результат будет таким же, как в статическом примере, приведённом несколькими абзацами выше. Но разница в том, что вы можете задавать значения в коде CSS и повторно использовать их в правилах CSS.
 

<!doctype html>
<html>
    <head>
        <style>
            font-size: 42px;
        </style>
        <link rel="stylesheet" href="style.css">
    </head>
    <body>
        <h1 style="color:blue">Hello, world!</h1>
    </body>
</html>

 

Пока всё идёт хорошо.

Но настоящая сила PHP,  заключается в его функциях.

Например, вы можете создать функцию для генерации элемента <link> с атрибутами rel=”” и href=””, хранящимися в переменных:

 

<?php
    // Define the linkResource() function
    function linkResource($rel, $href) {
        echo "<link rel='{$rel}' href='{$href}'>";
    }
?>


С помощью этой функции вы можете подключить любую внешнюю таблицу стилей CSS или JS-скрипт.

Обратите внимание на использование одинарных и двойных кавычек. Если в вашем PHP-коде используются двойные кавычки, то для HTML-кода в операторах echo нужно использовать одинарные кавычки, и наоборот.

Если вы вызовете функцию linkResource() в любом месте вашего PHP-файла со следующими параметрами:

// Call the linkResource() function
<?php linkResource("stylesheet", "/css/style.css"); ?>


Он выведет элемент DOM <link> с указанными параметрами в HTML-файл на стороне клиента:

<link rel="stylesheet" href="/css/style.css">


Вот как это выглядит на практике. Ниже приведён PHP-файл на стороне сервера:

 

<?php
    function linkResource($rel, $href) {
        echo "<link rel='{$rel}' href='{$href}'>";
    }
?>
<!doctype html>
<html>
    <head>
        <?php linkResource("stylesheet", "/css/normalize.css"); ?>
        <?php linkResource("stylesheet", "/css/style.css"); ?>
    </head>
    <body>
        <h1>Hello, world!</h1>
    </body>
</html>


Ниже будет выведен HTML-файл на стороне клиента:

 

<!doctype html>
<html>
    <head>
        <link rel='stylesheet' href='/css/normalize.css'>
        <link rel='stylesheet' href='/css/style.css'>
    </head>
    <body>
        <h1>Hello, world!</h1>
    </body>
</html>

В заключение

 

Есть два способа добавить CSS-код с помощью PHP. Первый — статический, то есть жёсткое кодирование в PHP-файлах, а второй — динамический, то есть генерация с помощью функций и переменных.

Теперь, когда вы знаете, как использовать оба инструмента, вы можете выбрать тот, который подходит для вашего проекта, в зависимости от потребностей и требований.

 

Источник: https://makersaid.com

 



Фото

Шпаргалка по CMD командам в Windows


Командная строка Windows (CMD) — мощный инструмент, который предоставляет доступ к широкому набору команд для выполнения различных задач, от работы с файлами до настройки сети и автоматизации процессов.  В статье рассмотрим 100 популярных команд CMD, которые пригодятся как новичкам, так и опытным пользователям. Для удобства они разделены по категориям. 

 

Общие команды CMD

Общие команды командной строки (CMD) позволяют пользователям управлять ОС Windows через интерфейс командной строки. Они нацелены на различные задачи – от получения справочной информации до управления процессами. 

  • hel — выводит список всех доступных команд и их краткое описание, что полезно для получения информации о базовых командах.
  • cls — очищает экран командной строки. Если в окне CMD много текста, этой командой можно убрать весь вывод и начать работу «с чистого листа».
  • exit — завершает текущую сессию командной строки и закрывает окно CMD.
  • echo — выводит сообщения в консоль или включает/выключает отображение команд в пакетных файлах – echo Hello, World! выведет Hello, World! на экран.
  • ver  отображает версию операционной системы Windows.
  • title  изменяет заголовок окна командной строки. Например, title Моя Командная Строка изменит заголовок на «Моя Командная Строка».
  • pause  временно приостанавливает выполнение скрипта, но при нажатии любой клавиши можно продолжить работу.
  • date  позволяет узнать или изменить текущую дату в системе.
  • time — отображает или изменяет текущее время в системе.
  • tasklist — выводит список всех запущенных процессов с их PID (идентификатором процесса).
  • powercfg — управляет настройками энергопотребления и профилями питания. 
  • fc — сравнивает два файла и отображает их различия. 

Сетевые команды CMD

В разделе собраны основные сетевые команды CMD, которые помогут управлять подключениями, диагностировать сетевые проблемы и выполнять разнообразные операции с сетью. Они незаменимы для системных администраторов и пользователей, нуждающихся в решении сетевых задач. 

  • ping  проверяет связь с удаленным узлом, отправляя ему пакеты данных. Например, ping google.com проверит доступность сервера Google.
  • ipconfig  отображает конфигурацию сетевых интерфейсов системы (IP-адреса, маску подсети и шлюзы).
  • netstat  выводит информацию о сетевых соединениях и открытых портах
  • netstat -an — показывает все активные соединения.
  • tracert  отслеживает маршрут пакета до целевого узла – tracert yandex.ru покажет все узлы, через которые проходит запрос.
  • nslookup  используется для проверки информации о DNS-серверах.
  • nslookup example.com — отображает IP-адрес сайта example.com.
  • arp  выводит или изменяет записи ARP (Address Resolution Protocol) –: arp -a покажет текущие записи ARP.
  • route  управляет таблицей маршрутизации сети – route print выведет все существующие маршруты в системе.
  • net use  подключает сетевые диски. Например, net use Z: \\server\folder подключит сетевой ресурс как диск Z:.
  • netsh  позволяет настраивать различные параметры сети через командную строку.
  • netsh wlan show profiles — отображает сохраненные профили Wi-Fi.

Команды для управления процессами

Команды ниже позволяют эффективно управлять процессами и службами на вашем ПК: помогают запускать службы, планировать задачи, управлять активными процессами, а также выключать или перезагружать систему. С их помощью можно автоматизировать выполнение задач, получать информацию о состоянии системы и контролировать её работоспособность. 

  • sc  управляет службами Windows. Пример: sc start servicename запустит службу с именем servicename.
  • schtasks  управляет планировщиком задач. Так, schtasks /create /tn «Моя Задача» /tr notepad.exe /sc once /st 12:00 создаст задачу для запуска.
  • start  запускает программу или команду в новом окне. Например, start notepad откроет блокнот.
  • wmic  взаимодействует с системой через Windows Management Instrumentation – wmic process list brief покажет список процессов.
  • shutdown  выключает, перезагружает или завершает работу системы. Так, shutdown /s /f /t 0 немедленно выключит компьютер.
  • systeminfo  выводит информацию о системе, включая версию Windows, параметры оборудования и установленные обновления.

Команды для управления файловой системой

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

  • dir  отображает список файлов и каталогов в указанной директории. Пример: dir C:\Windows выведет содержимое папки Windows.
  • cd  меняет текущий каталог. Так, cd C:\Users перейдет в папку пользователей.
  • md NewFolder  создает новую папку. 
  • rd  удаляет пустую папку. Пример: rd NewFolder удалит папку NewFolder.
  • copy  копирует файлы из одного места в другое.
  • move  перемещает файлы или папки.
  • del  удаляет файлы. Например, del file.txt удалит файл file.txt.
  • xcopy  копирует файлы и директории, включая их структуру. Так, xcopy C:\Source D:\Destination /s /e скопирует все файлы и папки из Source в Destination.
  • robocopy  более продвинутая версия xcopy, используется для надежного копирования данных. Например, robocopy C:\Source D:\Destination /mir синхронизирует две папки.

Команды для управления пользователями

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

  • net user  управляет учетными записями пользователей.
  • net user UserName /add  добавляет нового пользователя с именем UserName.
  • net localgroup  управляет локальными группами пользователей.
  • net localgroup Administrators UserName /add — добавляет пользователя в группу администраторов.
  • whoami  выводит имя текущего пользователя и информацию о его правах.
  • runas  позволяет запускать программы от имени другого пользователя. Так, runas /user:administrator cmd запустит CMD с правами администратора.
  • net accounts  управляет параметрами учетных записей, например, минимальной длиной пароля и периодом его действия.
  • gpupdate — обновляет групповые политики на локальном компьютере, что полезно для администраторов, управляемых сетей.
  • taskview — открывает таймлайн Windows, показывая историю активности пользователя, полезно для управления и поиска ранее использованных файлов и приложений.
  • msg — отправляет сообщение пользователям, подключенным к системе. Пример: msg «Система будет перезагружена через 5 минут» отправит сообщение всем пользователям.

Команды для управления безопасностью

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

  • cipher  управляет шифрованием файлов на дисках NTFS.
  • cipher/e — зашифровывает файлы в указанной директории.
  • sfc  проверяет целостность системных файлов и автоматически восстанавливает их при обнаружении повреждений.
  • sfc /verifyonly — проверяет системные файлы на наличие повреждений, но не исправляет их автоматически.
  • sfc /scannow  выполняет полную проверку системы.
  • cacls  изменяет права доступа к файлам. Пример: cacls file.txt /g UserName:F даст пользователю полный доступ к файлу.
  • icacls  расширяет возможности команды cacls и предоставляет дополнительные параметры для управления правами доступа.
  • takeown  позволяет взять владение файлом или директорией. Так, takeown /f file.txt предоставит доступ к файлам.
  • attrib  изменяет атрибуты файлов и папок. Например, attrib +r file.txt сделает файл доступным только для чтения.

Команды для диагностики и устранения неполадок

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

  • chkdsk  проверяет диск на наличие ошибок и исправляет их. Так, chkdsk C: /f выполнит проверку диска C.
  • bootrec  восстанавливает загрузочный сектор. 
  • bcdedit  управляет параметрами загрузки системы. 
  • bcdedit /set {current} safeboot minimal — включает безопасный режим.

Команды для скриптинга и автоматизации

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

  • for  создает цикл для выполнения команд. Например, for %i in (1 2 3) do echo %i выведет числа 1, 2, 3.
  • if  выполняет условное выполнение команд.
  • goto  перенаправляет выполнение скрипта к определенной метке.
  • call  вызывает другую команду или скрипт.

Команды для управления сетевыми подключениями

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

  • ipconfig /release  освобождает текущий IP-адрес, назначенный DHCP сервером, что позволяет при необходимости сбросить сетевое подключение.
  • ipconfig /renew  обновляет IP-адрес, полученный от DHCP сервера. Часто используется после команды ipconfig /release для восстановления подключения.
  • ipconfig /flushdns  очищает кэш DNS, если изменился DNS-сервер или необходимо устранить проблемы с доступом к сайтам.
  • ipconfig /displaydns  выводит содержимое кэша DNS, часто используется для диагностики проблем с DNS.
  • netsh interface ip set address  используется для назначения статического IP-адреса сетевому интерфейсу. Пример: netsh interface ip set address Ethernet static 192.168.1.100 255.255.255.0 192.168.1.1.
  • netsh wlan show drivers  выводит информацию о драйверах беспроводной сети, что полезно при настройке Wi-Fi подключения.
  • netsh wlan show interfaces  отображает текущие активные беспроводные подключения и их параметры, например, мощность сигнала.
  • netsh wlan connect  подключает к указанной Wi-Fi сети. Для этого нужно ввести: netsh wlan connect name=MyWiFi.
  • netsh wlan disconnect  отключает текущее беспроводное подключение.
  • netsh advfirewall set allprofiles state  управляет состоянием брандмауэра Windows – netsh advfirewall set allprofiles state off отключает брандмауэр для всех профилей.
  • netsh int ip reset  сбрасывает настройки IP стека (TCP/IP) к значениям по умолчанию, помогая при сетевых неполадках.
  • route add  добавляет маршрут в таблицу маршрутизации. Например, route add 192.168.2.0 mask 255.255.255.0 192.168.1.1 добавит маршрут для подсети 192.168.2.0 через шлюз 192.168.1.1.
  • route delete  удаляет указанный маршрут из таблицы маршрутизации.
  • netsh interface show interface  выводит список всех сетевых интерфейсов в системе, включая их состояние и тип.
  • net view  отображает список компьютеров в локальной сети – net view \\server покажет общие ресурсы на указанном сервере.
  • net use /delete  удаляет существующее подключение к сетевому ресурсу. Так, net use Z: /delete отключает сетевой диск Z:.
  • ftp  открывает FTP-клиент для передачи файлов между локальной и удаленной системами. Например, по команде ftp ftp.example.com ПК подключится к FTP-серверу.
  • telnet  используется для подключения к удаленным системам через Telnet-протокол. Так, telnet example.com 23 подключит ПК к серверу на порту 23.
  • getmac  выводит MAC-адреса всех сетевых интерфейсов компьютера.

Команды для управления печатью

В этом разделе команды для управления печатью позволяют эффективно управлять процессом печати (включая очередью на печать), настройками принтеров и заданиями на печать. 

  • print  отправляет файл на печать. Например, print C:\Documents\file.txt отправит текстовый файл на принтер по умолчанию.
  • rundll32 printui.dll,PrintUIEntry  открывает диалоговое окно для установки или управления принтерами – rundll32 printui.dll,PrintUIEntry /in /n\\server\printer установит сетевой принтер.
  • net print  отображает список заданий на печать – net print \\server\printer покажет очередь печати на указанном принтере.
  • net stop spooler  останавливает службу диспетчера очереди печати (spooler), особенно когда требуется устранить зависшие задания печати.
  • net start spooler  запускает службу диспетчера очереди печати после её остановки.
  • wmic printer list brief  выводит список установленных принтеров с краткой информацией о каждом из них.
  • wmic printer where default=true get name  выводит имя принтера, установленного по умолчанию.
  • wmic printer where name=’PrinterName’ delete  удаляет указанный принтер из системы.
  • wmic printerconfig  отображает информацию о конфигурации принтера, включая его настройки и параметры печати.
  • cscript prnjobs.vbs  используется для управления заданиями печати через скрипт prnjobs.vbs, который можно использовать для удаления, приостановки или возобновления заданий.

Дополнительные команды в Windows

В дополнение к основным инструментам для управления системой, командная строка Windows предоставляет ряд дополнительных команд, которые расширяют возможности администрирования и диагностики. 

  • wevtutil  управляет журналами событий Windows. Например, wevtutil qe System выведет события из системного журнала.
  • tzutil — управляет настройками часовых поясов. tzutil /s Pacific Standard Time установит часовой пояс на Тихоокеанское стандартное время.
  • taskkill — завершает процесс по его PID или имени. Так, taskkill /F /PID 1234 завершит процесс с PID 1234.
  • powercfg /hibernate off — отключает режим гибернации.
  • powercfg /energy — создает отчет об использовании энергии системой.

 

Источник: https://www.computerra.ru

 



Фото

Маршрутизатор и коммутатор, в чем разница?


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

Что такое маршрутизация и зачем появились маршрутизаторы

Сетевая маршрутизация — это процесс определения пути для данных (пакетов) между разными сегментами. Роутер работает на уровне L3 (сетевом), использует IP-адреса, чтобы направлять трафик туда, куда нужно. Без него невозможна связь между вашей домашней LAN, а также внешним миром.

Принципы маршрутизации могут применяться к любому типу подключения, от телефонных до общественного транспорта. В коммутации пакетов, маршрутизация выбирает пути для пакетов интернет-протокола (IP), которые будут перемещаться из их происхождения в пункт назначения. Эти решения о маршрутизации принимаются специализированным оборудованием.

Устройства ссылаются на внутренние таблицы маршрутизации для принятия решений о том, как маршрутизировать пакеты по сетевым путям. Таблица маршрутизации записывает пути, по которым должны идти пакеты, чтобы добраться до каждого пункта назначения, за который отвечает маршрутизатор. Алгоритм работы: когда роутер получает пакет, он читает заголовки, чтобы увидеть его предполагаемое место назначения. Затем он определяет, куда маршрутизировать пакет на основе информации в таблицах маршрутизации. Эта процедура выполняется миллионы раз в секунду. Пакет может обрабатываться несколькими устройствами перед доставкой.

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

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

Коммутатор, маршрутизатор, роутер

Коммутатор (сетевой коммутатор) — это устройство, которое объединяет несколько компьютеров в одну локальную сеть. В отличие от старого хаба, он не просто ретранслирует данные, а анализирует MAC-адреса и отправляет пакеты только нужному получателю. Это делает сеть быстрее и безопаснее.

Задача коммутатора состоит в подключении всех девайсов, оборудования к локальной сети. Коммутатор выполнен в виде прямоугольного корпуса: от компактного размера (с пачку сигарет) до крупногабаритного шкафа, монтируемого в 19-дюймовую стойку. Количество портов варьируется от 5 в малых моделях до 1152 (как в Cisco Nexus 9508 в максимальной комплектации с портами 10G). Финальные габариты и возможности устройства зависят от количества портов, их скорости (1G/10G/25G/100G и выше) и компоновки. Обычно используется витая пара, реже — оптоволоконные кабели. Основной разъем — RJ45, иногда SFP и его варианты.

Работая с коммутатором, можно избежать всех хлопот по настройке сетевого подключения — компьютеров, ноутбуков, телевизоров, кодеков, игровых приставок. Проводные роутеры обеспечивают безопасную передачу данных на коммутатор. Затем отправляется информация на устройства на основе списка MAC-адресов.

 

 

Основные типы коммутаторов:

  • управляемые;
  • неуправляемые.

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

Управляемые модели бывают разных уровней: L2 и L2+ — это относительно недорогие модели с ограниченным функционалом (например, базовое управление VLAN, QoS), но достаточным для многих задач. Более продвинутые управляемые коммутаторы предлагают широкие возможности настройки и подходят для построения сложных сетевых инфраструктур благодаря поддержке функций вроде L3-маршрутизации, ACL и детального мониторинга. Однако для домашнего использования такие устройства избыточны — их покупка означает неоправданную переплату за неиспользуемые возможности.

Управляемый коммутатор уровня 3 (L3) выполняет функции маршрутизатора, такие как работа с IP-адресами, а также маршрутизация между подсетями. Однако он оптимизирован для локальных сетей (LAN) и обычно работает быстрее в рамках одной сети, тогда как маршрутизатор чаще используют для соединения разных сетей (например, LAN и WAN). Разница в гибкости: у маршрутизатора больше возможностей для сложных правил (NAT, фильтрация), а L3-коммутатор эффективнее в локальном трафике.

Маршрутизатор (роутер) — более сложное устройство, которое связывает разные сети. Он подключаются к двум или более IP-сетям или подсетям и передают между ними пакеты данных. Маршрутизаторы используются в домах либо офисах для обеспечения подключения к внешней сети.Устройство работает на сетевом уровне модели OSI, одновременно функционируя на уровне протокола TCP/IP.

Более мощные модели работают по всему Интернету, помогая пакетам данных добраться до места назначения. Например, он соединяет вашу домашнюю LAN с WAN (интернетом). Он работает на уровне L3, принимает решения на основе IP-адресов, часто включая дополнительные функции: Wi-Fi, firewall, DHCP.

Функции:

  • управление трафиком путем пересылки пакетов;
  • позволяет нескольким гаджетам подключаться к одинаковой сети;
  • применяется для пересылки пакета между сетями.

Роутер — это устройство, которое распределяет доступ к внешней сети — Интернет от провайдера на множество проводных, беспроводных устройств. Он создает локальную сеть в доме. Все устройства, такие как смартфоны, телевизоры, компьютеры, а также ноутбуки, умные устройства – подключаются к роутеру, который пересылает все данные в зависимости от запроса, либо внутри локальной сети, либо же отправляет “наружу”. Внешней сетью может быть как мобильная (3g/4g/5g), спутниковая (Старлинк/полудуплексные решения от Триколора и т.д.), оптическая (xPON решения и обычный ethernet через медиаконвертеры), медь (ethernet и до сих пор используемый в деревнях adsl).

Сегодня услуги интернет-провайдеров предоставляются сетями, разбросанными по всему городу. Однако для пользователей эта сеть является внешней (глобальной), поскольку не находится в их квартирах или домах. Конечно, можно подключить кабель, проложенный поставщиком услуг подключения, непосредственно к компьютеру или ноутбуку. Но как же остальные члены семьи, которые тоже хотят пользоваться интернетом? Здесь на помощь приходят роутеры. Один из портов который, обычно называемый WAN-портом, подключает интернет-линию. У некоторых производителей этот порт выделен цветом (например, синим или голубым), но стандартного цветового обозначения нет — важно ориентироваться на подписи (WAN/Internet) или инструкцию к устройству.

 

 

А порты LAN используются для подключения нескольких компьютеров или ноутбуков по проводу. Через тот же интерфейс можно подключить множество других устройств, например, принтеры, телевизоры SMART и камеры наблюдения, в данный порт можно также подключить коммутатор, чтобы увеличить количество возможных проводных подключений или же дополнительные Wi-fi точки доступа, чтобы увеличить покрытие сети.

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

Маршрутизатор и роутер — это одинаковые понятия. 

Термин «роутер» — это англицизм (от router), а «маршрутизатор» — русский аналог. Оба термина обозначают устройство, которое пересылает данные между сетями, будь то домашняя Wi-Fi-сеть или корпоративная инфраструктура. В быту маршрутизатор часто называют роутером, особенно если речь идет о компактном устройстве с антеннами, раздающем беспроводной интернет. Техподдержка может использовать оба слова, но суть не меняется: это устройство, обеспечивающее подключение к сети. Разницы в функционале нет, отличие лишь в происхождении терминов.

Основные функции

Коммутатор обеспечивает быстрое соединение внутри одной сети. Его ключевые задачи — минимизация коллизий, а также эффективная передача данных между устройствами. Современные модели поддерживают VLAN, агрегацию портов и QoS.

Маршрутизатор же отвечает за связь между сетями. Он не только направляет трафик, но может преобразовывать адреса (NAT), фильтровать пакеты (firewall). В домашних условиях роутер часто работает, также как коммутатор, имея несколько LAN-портов.

Разница между коммутатором и маршрутизатором

Главное отличие — в их назначении. Коммутатор работает внутри одной сети, используя MAC-адреса, а маршрутизатор соединяет несколько сетей, оперируя IP-адресами.

Маршрутизаторы выбирают пути для пакетов данных для кросс-сетей, достигая своих пунктов назначения. Они делают это, подключаясь к различным сетям, пересылая данные из сети в сеть. Учитываются также локальные, глобальные сети (WAN) или автономные системы. Последние являются крупными сетями, составляющими Интернет.

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

 

Основное отличие:

  • если вам нужно объединить компьютеры в офисе — берем коммутатор;
  • если требуется подключить сеть к интернету — нужен маршрутизатор.

Где используется маршрутизатор и коммутатор?

Маршрутизатор встречается везде, где есть выход в интернет: дома, в офисах, дата-центрах. Он также применяется для разграничения подсетей и балансировки нагрузки.

Коммутатор используется там, где нужно создать быструю локальную сеть: в офисах (для подключения ПК, принтеров, IP-камер), на предприятиях, в серверных. Управляемые модели позволяют гибко настраивать трафик.

Как подключиться к маршрутизатору и коммутатору?

Большинство современных роутеров настраиваются через веб-интерфейс. Достаточно подключиться к сети (по Wi-Fi или кабелю), ввести в браузере IP-адрес (например, 192.168.1.1), далее авторизоваться.

Коммутаторы (особенно управляемые) можно настроить через веб-интерфейс, SSH или консольный порт. Последний вариант часто используется в профессиональной среде, так как позволяет восстановить доступ даже при сбоях.

Базовые настройки маршрутизатора и коммутатора

Для маршрутизатора важно:

  • настроить подключение к провайдеру (PPPoE, DHCP, статический IP);
  • включить DHCP, чтобы устройства получали адреса автоматически;
  • установить пароль на Wi-Fi и выбрать оптимальный режим шифрования.

Для коммутатора основные настройки включают:

  • создание VLAN для разделения трафика;
  • настройку агрегации портов (LACP) для увеличения пропускной способности;
  • управление QoS для приоритезации важного трафика (например, VoIP).

Современные тенденции: L2 и L3 коммутаторы

Традиционные коммутаторы L2 работают только с MAC-адресами, не умеют маршрутизировать трафик. Но сейчас популярны L3-коммутаторы, которые сочетают функции коммутации, маршрутизации. Они быстрее классических роутеров в локальных сетях, чаще используются в корпоративных решениях.

Еще более продвинутые модели — Multilayer Switch (L3+), которые поддерживают сложные политики маршрутизации и ACL. Они стирают грань между коммутатором и маршрутизатором, предлагая гибридные возможности.

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

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

 

Источник:  https://cloud4box.com

 

 



1 2 3 4    Следующая