По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие наши статьи:
img
В статье речь пойдет о логах в Астериск. Существует встроенный модуль для FreePBX - Asterisk Logfiles Module, который позволяет просмотреть самые недавние события. Просмотр логов с помощью FreePBX Модуль можно найти по следующему пути: Reports – Asterisk Logfiles. Однако, данный модуль мало полезен, если требуется проверить не только недавние логи, но и недельной, а то и месячной давности. Если появилась такая нужда, требуется подключится к вашей АТС по SSH, например, используя терминальный клиент PuTTy. Кроме того, если есть физический доступ к серверу, можно использовать и его. Почему проще использовать терминальный клиент? Ответ прост – PuTTy поддерживает операции копироватьвставить, что многократно упрощает работу. Просмотр логов через консоль Итак, порядок действий для доступа к логам Астериск: Вход на АТС, используя рутовый логин и пароль. После успешного входа вводится команда cd /var/log/asterisk Для вывода списка лог-файлов нужно ввести команду ls –l Обычно, все файлы называются «full-DATE», где DATE – дата логирования. Если требуется посмотреть и отсеять сегодняшний лог-файлы, нужно ввести nano full . Данная команда откроет лог-файл с помощью текстового редактора nano. Nano сразу же продемонстрирует список команд для управлением текстовым редактором Для просмотра можно использовать клавиши Page Up и Page Down, CTRL-W для поиска и CTRL-X для выхода. Соответственно, для открытия конкретного файла, нужно написать nano full-20160629 Если вы случайно внесли изменения и пересохранили лог-файл, то Астериск прекратит логирование сегодняшнего дня. Для исправления данной проблемы необходимо запустить следующую команду amportal restart . Данная команда будет ждать 120 секунд для завершения текущих вызовов, и по прошествии 120 секунд все вызовы будут принудительно завершены. Так же возможно использовать команду Linux grep, к примеру для вывода в текущем лог-файле всех событий связанных с недоступным транком - grep “is now” full Если результатов слишком много, есть возможность скопировать их в новый файл - grep "is now" full > newlogfile Для его просмотра можно использовать уже знакомый редактор nano - nano newlogfile Удалить данный файл можно командой - rm tempfile Так же есть возможность просматривать логи в реальном времени - asterisk –r Для выхода используется команда - exit И ещё один способ просмотра лог-файлов в реальном времени – tail.Делает это так: cd /var/log/asterisk tail –f full Для выхода нужно нажать CTRL-C.
img
Безопасность личных данных стоит почти наравне с физической безопасностью людей. Развитие Интернет технологий создало возможность мгновенного доступа ко всей информации не выходя из дома. Государственные организации создают электронный порталы, где можно получить любую информацию о себе. Финансовые организации оказывают онлайн услуги клиентам в виде интернет-банкинга. Публичные сети же сделали все это более доступным. Сидя в любом кафе можем проверить свой банковский счет, получить нужную справку в электронном формате, занять онлайн очередь в разных структурах. Но зачастую подключаясь к открытым, бесплатным беспроводным сетям мы даже не задумываемся, а на самом ли деле на том конце стоит маршрутизатор и наши данные не попадают в руки тех, кто не должен их видеть. В публичных сетях много угроз, одной из которых является атака MITM Man-in-the-Middle "Человек посередине" или атака посредника. Вкратце это такой тип атаки когда хакеры, подключившись к точке доступа, могут поместить себя в качестве посредника между двумя пользователями, у которых нет протоколов взаимной аутентификации. Как только злоумышленники полностью завладевают соединением, они могут читать и даже изменять любую передаваемую информацию. Опытные хакеры могут даже извлечь из потока данных информацию о вашей банковской карте. Последствия утраты таких данных очевидны. Такой вид атаки легче организовать в беспроводных сетях, хотя и проводные сети не застрахованы от этой атаки. Но в проводных сетях можно настроить сетевые устройства таким образом, чтобы она реагировала на смену связки IP и MAC-адреса и при обнаружении заблокировать доступ к сети подозрительному устройству. В проводных же сетях, особенно если это публичные сети, всё немного сложнее. Поэтому пользователям придется самим позаботиться о безопасности своих личных данных. Приготовиться к атаке! Чтобы не стать жертвой атаки типа MITM, нужно знать всего несколько правил безопасности. Первое правило - Firewall Во-первых, включите на своём устройстве межсетевой экран. В системе Windows это Windows Defender Firewall. Он по умолчанию включён, если у вас не установлено стороннее ПО, выполняющее ту же функцию. Проверить и включить Firewall можно на панели управления перейдя по одноимённому пункту меню и выбрав Включить/выключить Windows Defender Firewall: Это защитит ваш компьютер от вторжения злоумышленника и кражи ваших электронных данных. Также не помещает установить какой-нибудь антивирус, даже бесплатный, который способен защитить ваше устройство от заражения сетевым червем, который тоже занимается кражей данных и не только. Никакого HTTP! Во-вторых, в публичных сетях лучше избегать пользования услугами онлайн-банкинга. Но если есть сильная необходимость, то убедитесь, что ваш банк обеспечивает шифрованное соединение между вами и сервером. Проверить это легко. При шифрованном соединении в строке браузера перед адресом отображается значок замка, а перед адресом сайта отображается https://. HTTPS это защищенный протокол передачи данных в сети. Hypertext Transfer Protocol основной протокол связи в интернете. Когда пользователь вводит адрес в строке браузера, последний создает соединение с веб-сервером по этому протоколу. Позже была разработана защищенная версия данного протокола, которая отправляет данные поверх SSL или TLS. Такое соединение позволяет шифровать данные перед отправкой на сервер. Шифрование происходит на устройстве пользователя методом асимметричного шифрования с помощью публичного ключа, который сайт отправляет вам вместе с сертификатом. Посмотреть сертификат сайта и публичный ключ можно в том же браузере. В Google Chrome кликаем на значок замка и выбираем Certificate. В открывшемся окне можно увидеть всю информацию о сертификате включая срок действия и подписавшую сертификат центра сертификации. Расшифровать данные сможет только веб-сервер где имеется вторая приватная часть ключа шифрования. И даже если ваши зашифрованные данные попадут в руки злоумышленников, расшифровать их им придется долго. Правда, атака посредника имеет несколько векторов развития и при наличии необходимых навыков злоумышленник может получить доступ даже к шифрованной информации. Например, он может взломать сервера центра сертификации и заполучить все ключи, которые выданы клиентам. Но это уже больше забота самих центров сертификации. Некоторые сайты имеют две версии, защищенную и обычную через http-протокол. Чтобы всегда пользоваться только защищенным соединением, можете устанавливать специальные расширения для браузеров. Шифрование через VPN В-третьих, при подключении к публичным сетям рекомендуется пользоваться VPN сервисами. VPN сервисы создают защищенный туннель между вами и серверами поставщика VPN услуг. Все данные в таком туннеле тоже шифруются надежными алгоритмами шифрования. Услуги VPN предоставляют даже некоторые браузеры, например Opera или Яндекс.Браузер. Так же есть специальные расширения для браузеров и настольные приложения. Правда, при работе через VPN скорость ощутимо падает, но безопасность данных того стоит. Кстати, о том, что такое VPN и как он обходит блокировки можно почитать в нашей статье Ну а напоследок, просто быть повнимательнее. Не нужно подключаться к первой попавшейся беспроводной сети с подозрительным названием. Если вы сидите в кафе, то название точки доступа обычно совпадает с названием объекта. Правда, подмену SSID никто не отменял, но для этого нужно вырубить роутер, безопасность которого забота сотрудников ИТ отдела данного объекта. Безопасного интернет-серфинга!
img
Промис в JavaScript — это заменитель (прокси) для значения текущей операции. Обычно мы используем промис для управления ситуациями, когда необходимо дождаться результата операции. Например, при загрузке файлов на сервер и ожидании ответа от API, или просто при запросе у пользователя выбора файла с их компьютера. В этой статье вы узнаете о промисах в JavaScript, создавая реальное приложение, похожее на приведенное ниже: Что такое промис?  Промис — это просто функция, она возвращает объект, к которому можно прикрепить обратные вызовы. Обратные вызовы, прикрепленные к объекту промиса, будут вызываться только после завершения операции. Обратные вызовы будут ожидать, пока операция не будет выполнена или отклонена. fetch(`some_api_url`).then((response) => { // Everything here will wait the fetch operation to complete }); Прежде чем промис окончательно решится (то есть либо выполнится, либо будет отклонен), он должен пройти через разные состояния: Состояние Описание Обратный вызов Ожидание Операция все еще выполняется, и промис находится в ожидании - Выполнен Операция завершена успешно .then() Отклонен Операция завершена с ошибкой .catch() Завершен Промис либо разрешен, либо отклонен, в любом случае вызывается этот обратный вызов .finally() Когда создается промис, начальное состояние — ожидание. Затем, в зависимости от результата операции, промис либо выполняется, либо отклоняется. Из таблицы выше можно легко увидеть обратный вызов, который будет вызван в зависимости от состояния промиса: fetch(`some_api_url`).then((response) => {  // This will get called when the promise fulfills }).catch((error) => {  // This will get called when the promise is rejected }).finally(() => {  // This will get called all the time }) Как использовать промисы в JavaScript Теперь, когда вы узнали, что такое промис, давайте покажем, как вы можете использовать промисы в JavaScript, создав приложение для поиска фильмов, которое мы видели ранее. Базовое приложение для поиска фильмов должно иметь поле ввода, где пользователи могут искать свои любимые фильмы. Также должно быть пользовательский интерфейс для отображения базовой информации о найденном фильме. Давайте начнем с создания HTML. Как написать HTML Для целей этого руководства и чтобы показать живые примеры, я буду использовать Codepen, но вы можете использовать ваш любимый редактор кода. Создайте файл index.html и добавьте следующий код:             Movie
               
                                         
                        
         
      
                                           
                       
            
                           

Details

                               
  • Premiered: 
  •                 
  • Rating: 
  •                 
  • Runtime: 
  •                 
  • Status: 
  •                            
                                           Watch Movie           
                                                
                  
    Мы создали скелет нашего приложения для фильмов. Теперь давайте оживим его с помощью CSS: %[https://codepen.io/Spruce_khalifa/pen/wvygzLq?editors=0100] Как получить фильм Чтобы получить наш фильм, мы будем использовать API TVMAZE. Создайте файл main.js и добавьте следующий код: const get_movie = (value = "Game of thrones") => {   fetch(    `https://api.tvmaze.com/singlesearch/shows?q=${value}&embed=episodes`  ).then((response) => create_UI(response.json())); }; Мы создали функцию get_movie(value = "Game of thrones"), которая использует API fetch в JavaScript. Мы используем его для выполнения GET запроса к нашему API фильмов. API fetch возвращает промис. Чтобы использовать ответ от API, мы прикрепляем обратный вызов .then(), в который передаем response.json() в новую функцию create_UI(). Давайте создадим функцию create_UI: const create_UI = (data) => { const movie_img = document.querySelector("#img_src"); const movie_icon = document.querySelector("#img_icon"); const movie_title = document.querySelector(".movie_title"); const movie_desc = document.querySelector(".movie_desc"); const movie_link = document.querySelector(".btn"); const movie_date = document.querySelector("#movie_date"); const movie_rating = document.querySelector("#movie_rating"); const movie_runtime = document.querySelector("#movie_runtime"); const movie_status = document.querySelector("#movie_status"); // set the UI  movie_icon.src = data.image.medium;  movie_img.src = data.image.original;  movie_title.textContent = data.name;  movie_desc.innerHTML = data.summary;  movie_link.href = data.officialSite;  movie_date.textContent = data.premiered;  movie_rating.textContent = data.rating.average;  movie_runtime.textContent = data.runtime;  movie_status.textContent = data.status; }; Эта функция, как следует из названия, помогает нам создать пользовательский интерфейс для нашего приложения фильмов. Но нам все еще нужен способ получить имя фильма от пользователей, так что давайте это исправим. Первое, что нам нужно сделать, это добавить обработчик события onsubmit в нашу HTML-форму:
      //
    Теперь в нашем файле main.js мы можем обработать то, что происходит при отправке формы: // handle form submit const search = (event) => {  event.preventDefault(); const value = document.querySelector(".header_form-input").value; get_movie(value); }; Каждый раз, когда пользователь отправляет форму, мы получаем значение, которое они ввели в поле поиска, и передаем его в функцию get_movie(value = "Game of thrones"), которую мы создали ранее. Цепочка промисов В отличие от того, что мы видели в предыдущих примерах, обратный вызов .then() не является концом. Дело в том, что когда вы возвращаете значение промиса, вы получаете другой промис. Это становится очень полезным, когда вы хотите выполнить серию асинхронных операций по порядку. Например, наше API фильмов не только возвращает информацию о фильме, но и информацию обо всех эпизодах. Допустим, что мы действительно не хотим отображать все эпизоды "Игры престолов", нам нужны только первые четыре (4) эпизода. С помощью цепочки промисов мы можем легко этого достичь: const get_movie = (value = "Game of thrones") => {  fetch(`https://api.tvmaze.com/singlesearch/shows?q=${value}&embed=episodes`)    .then((response) => response.json())    .then((data) => {      if (data._embedded.episodes.length > 0) {        const new_data = data._embedded.episodes.slice(0, 4);        create_UI(data);        return create_episodesUI(new_data);      } else {        return create_UI(data);      }    }); }; Это все та же функция get_movie(), но на этот раз, вместо того чтобы передавать данные в функцию create_UI, мы возвращаем ответ .then((response) => response.json()). Это создает новый промис, к которому мы можем прикрепить дополнительные обратные вызовы. В идеале эта цепочка может продолжаться бесконечно. Помните, что все, что вам нужно сделать, это вернуть значение промиса. Как обрабатывать ошибки в промисах Ошибки, которые происходят в промисе, немедленно попадают в обратный вызов .catch(): fetch(`https://api.tvmaze.com/singlesearch/shows?q=${value}&embed=episodes`)    .then((response) => response.json())    .then((data) => {      // any error here will trigger the .catch() callback    }).catch((error) => {    // all errors are caught and handled here    }) Обратный вызов .catch() является сокращением для .then(null, (error) => {}). Вы также можете написать это так: fetch(`https://api.tvmaze.com/singlesearch/shows?q=${value}&embed=episodes`)    .then((response) => response.json())    .then((data) => {      // any error here will trigger the .catch() callback    }, (error) => {    // all errors are caught and handled here    }) В нашем приложении для поиска фильмов, например, когда мы сталкиваемся с ошибками, мы можем обработать и отобразить пользователям приятное сообщение об ошибке в обратном вызове .catch(): const get_movie = (value = "Game of thrones") => { fetch(`https://api.tvmaze.com/singlesearch/shows?q=${value}&embed=episodes`)    .then((response) => response.json())    .then((data) => {      if (data._embedded.episodes.length > 0) {        const new_data = data._embedded.episodes.slice(0, 4);        create_UI(data);        return create_episodesUI(new_data);      } else {        return create_UI(data);      }    })    .catch((error) => {      console.log(error.message);      // Challange: display your error here    }); }; Теперь, если по какой-то причине мы получаем ошибку, обратный вызов .catch() будет вызван, и мы отобразим корректную ошибку пользователю. Как создать промисы в JavaScript Теперь, когда мы узнали, что такое промисы и как их использовать, давайте посмотрим, как мы можем создать промис в JavaScript. Чтобы создать промис в JavaScript, используйте конструктор промиса. Конструктор принимает один аргумент: функцию с двумя параметрами, resolve и reject: const is_true = true const new_promise = new Promise((resolve,reject) => {  if(is_true) {    // everything went fine    resolve()  } else {    // Oops there was an error    reject()  } }) Затем мы можем использовать наш new_promise, прикрепляя к нему обратные вызовы: new_promise .then((response) => {    // everything went fine }) .catch((error) => {    // handle errors }); Подведем итоги В этом руководстве мы узнали о промисах, что это такое и как их использовать, создавая приложение для поиска. Счастливого кодинга!
    ЗИМНИЕ СКИДКИ
    40%
    50%
    60%
    До конца акции: 30 дней 24 : 59 : 59