По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие
наши статьи:
JSON (JavaScript Object Notation – нотация объектов JavaScript) – это популярный способ структурирования данных. Он используется для обмена информацией между веб-приложением и сервером. Но как прочитать файл JSON в Python?
В этой статье я покажу вам, как использовать методы json.loads() и json.load() для интерпретации (или как еще говорят парсинга) и чтения файлов и строк JSON.
Синтаксис JSON
Прежде чем мы приступим к интерпретации и чтению файла JSON, сначала нам нужно разобраться с основным синтаксисом. Подробнее про JSON можно почитать в этой статье. Синтаксис JSON выглядит как объектный литерал JavaScript с парами ключ-значение.
Вот пример данных JSON с данными организации:
{
"organization": "Company 1",
"website": "https://www.website.org/",
"formed": 2014,
"certifications": [
{
"name": "Responsive Web Design",
"courses": [
"HTML",
"CSS"
]
},
{
"name": "JavaScript Algorithms and Data Structures",
"courses": [
"JavaScript"
]
},
{
"name": "Front End Development Libraries",
"courses": [
"Bootstrap",
"jQuery",
"Sass",
"React",
"Redux"
]
},
{
"name": "Data Visualization",
"courses": [
"D3"
]
},
{
"name": "Relational Database Course",
"courses": [
"Linux",
"SQL",
"PostgreSQL",
"Bash Scripting",
"Git and GitHub",
"Nano"
]
},
{
"name": "Back End Development and APIs",
"courses": [
"MongoDB",
"Express",
"Node",
"NPM"
]
},
{
"name": "Quality Assurance",
"courses": [
"Testing with Chai",
"Express",
"Node"
]
},
{
"name": "Scientific Computing with Python",
"courses": [
"Python"
]
},
{
"name": "Data Analysis with Python",
"courses": [
"Numpy",
"Pandas",
"Matplotlib",
"Seaborn"
]
},
{
"name": "Information Security",
"courses": [
"HelmetJS"
]
},
{
"name": "Machine Learning with Python",
"courses": [
"Machine Learning",
"TensorFlow"
]
}
]
}
Как парсить строки JSON в Python
Python имеет встроенный модуль, который позволяет работать с данными в формате JSON. Вам необходимо будет импортировать модуль json.
import json
Если вам необходимо проинтерпретировать строку JSON, возвращающую словарь, то вы можете воспользоваться методом json.loads().
import json
# assigns a JSON string to a variable called jess
jess = '{"name": "Jessica Wilkins", "hobbies": ["music", "watching TV", "hanging out with friends"]}'
# parses the data and assigns it to a variable called jess_dict
jess_dict = json.loads(jess)
# Printed output: {"name": "Jessica Wilkins", "hobbies": ["music", "watching TV", "hanging out with friends"]}
print(jess_dict)
Как парсить и читать файлы JSON в Python
В данном примере мы имеем файл в формате JSON с именем fcc.json, который содержит те же данные, что и ранее, касающиеся курсов, которые предлагает сайт.
Если вы хотите прочитать этот файл, то для начала вам нужно использовать встроенную в Python функцию open() с режимом чтения. Мы используем ключевое слово with, чтобы убедиться, что файл закрыт.
with open('fcc.json', 'r') as fcc_file:
Если файл не может быть открыт, то мы получим ошибку OSError. Это пример ошибки "FileNotFoundError" при опечатке в имени файла fcc.json.
Затем мы можем проинтерпретировать файл, используя метод json.load() и присвоить его переменной с именем fcc_data.
fcc_data = json.load(fcc_file)
И в конце мы должны напечатать результат.
print(fcc_data)
Вот так будет выглядеть полный код:
import json
with open('fcc.json', 'r') as fcc_file:
fcc_data = json.load(fcc_file)
print(fcc_data)
Как красиво напечатать данные JSON в Python
Если мы посмотрим на то, как печатаются данные, то увидим, что все данные JSON печатаются в одной строке.
Однако такой формат вывода может быть затруднительным для чтения. И чтобы это исправить, мы можем реализовать метод json.dumps() с параметром indent (отступ).
В данном примере мы сделаем отступ в 4 пробела и будем печатать данные в более удобном для чтения формате.
print(json.dumps(fcc_data, indent=4))
Также мы можем отсортировать ключи в алфавитном порядке, используя параметр sort_keys и установив его значение на True.
print(json.dumps(fcc_data, indent=4, sort_keys=True))
Заключение
JSON – это популярный способ структурирования данных, который используется для обмена информацией между веб-приложением и сервером.
Если вам необходимо проинтерпретировать строку JSON, которая возвращает словарь, то вы можете использовать метод json.loads().
Если вам необходимо проинтерпретировать файл JSON, который возвращает словарь, то вы можете использовать метод json.load().
Первые два типа систем (IPS - intrusion prevention system & IDS - intrusion detection system) появились в 1986 году как результат научной работы, и их базовые принципы до сих пор используются повсюду – в системах предотвращения и обнаружения, в NGIPS и NGFW – словом во всех системах, которые были упомянуты в заголовке. В статье мы расскажем, как IPS/IDS изменялись со временем, с какими проблемами сталкивались разработчики и что можно от них ожидать в будущем.
Итак, как мы уже сказали, системы обнаружения угроз и системы предотвращения угроз появились после написания научной статьи некой Дороти Деннинг, и называлась эта статья «Модель обнаружения угроз», и благодаря этой статье Стэнфордский Исследовательский Институт разработал нечто под названием Intrusion Detection Expert System/ (IDES). Вольно это можно перевести как экспертная система обнаружения угроз. Она использовала статистическое обнаружений аномалий, сигнатуры и хостовыепользовательские профили для детектирования редискового поведения у систем. Таким образом, она могла определить если такие протоколы как FTP или HTTP были использованы некорректно и даже могла определять атаки с отказом обслуживания (DoS).
2000 - 2005: Обнаружение предпочтительнее предотвращения
В ранних 2000х системы обнаружения считались хорошим тоном. А до этого межсетевые экраны были очень эффективны для ландшафта угроз безумных 90х годов. Фаерволы обрабатывали трафик относительно быстро, так как в них не было глубокой инспекции пакетов, то есть вы не знали, что это за трафик приходит к вам в сеть – фаерволы реагировали только на установленные в правилах (листах контроля доступа) порты, протоколы иили сетевые адреса. В начале 2000х появились новые атаки, такие как SQL-инъекции и прочие, и они моментально завоевали место на подиуме в арсенале взломщиков. И вот на этом этапе IDS системы и пригодились – а время систем предотвращения угроз еще не настало.
В то время некоторые организации боялись использовать IPS так как такая система потенциально могла заблокировать безвредный трафик. Как мы более подробно описывали в нашей статье про IPS и IDS, IPS ставится «в разрыв» и блокирует подозрительные соединения, полностью разрывая коннект и связь между отправляющей и принимающими сторонами. Но как вы могли понять, такое соединение могло стать подозрительным просто по причине какой-то аномалии в подключении и грубо говоря «глюке». Таким образом, IDS системы просто сообщали о такой аномалии и ничего не блокировали, чтобы сисадмин мог среагировать и проверить - правда ли это что-то плохое или же это просто доброкачественная аномалия. По этой причине в то время рынок для систем предотвращения угроз был настолько мал, что существовало всего несколько IPS вендоров. То есть идеей было что нужно пропускать любой трафик, а разберемся, мол, уже опосля – риск потери хорошего трафика был страшнее угрозы взлома.
В это время сигнатуры писались для обнаружения эксплойтов, но не уязвимостей – то есть для каждой уязвимости было 100 разных способов эксплойта. Как только злоумышленники находили уязвимость, они заставляли разработчиков IDS исходить потом и писать сотни разных сигнатур для эксплойтов – все только для того, чтобы система обнаружения отправила тревогу админу. И вендоры IDS хвастались количеством имеющихся у них сигнатрур, будто это выгодно отличало их от конкурентов – но как вы понимаете, это не было корректным критерием оценки. В общем и целом, механизмы тогда насчитывали следующее полчище методов – совпадение по паттернам, строкам, аномалиям и даже эвристический анализ.
Принятие IPS - год 2005
Когда в 2005 году системы предотвращения начали становится популярнее, большее количество вендоров стали соревноваться за место под солнцем на растущем рынке, и перестали хвастать самыми длинными сигнатурами. Опять же, по причине установки «в разрыв», клиенты боялись, что все эти сигнатуры будут замедлять сеть, так как каждое соединение должно быть пропущено через них. Таким образом, было решено сменить вектор написания сигнатур на другие – те, которые будут базироваться не на эксплойте, а на самой уязвимости. Было получено опытным путем, что если в системе более 3500 сигнатур, то это будет заметно сказываться на производительности. Сегодня производители все еще помещают в систему как новые сигнатуры, так и некую классику уязвимостей, которую злоумышленники могут использовать.
2006 – 2010: Настает время производительных IPS/IDS комбайнов
Вендоры, которые предлагали гибридные системы, быстро обошли конкурентов – они предлагали гораздо более производительные системы, вплоть до 5 Гбитсек, и могли мониторить сегментированные сети, DMZ, серверные фермы с веб-приложениями и площадь внутри периметра. К примеру, сегодня производительные IPS устройства легко дают более 40 гигабит в секунду.
В итоге, клиенты начали массово переходить на системы предотвращения вторжений и рынок начал очень быстро расти. А когда появился стандарт безопасности PCI DSS начал требовать от организаций поддержу оплаты картами установки или IDS, или МСЭ с возможностью фильтрации веб-приложений, очень много организаций купили гибридные системы. И прошло уже много лет с момента рождения технологии, так что технологию порядочно оттюнинговали и подрихтовали, так что, ложно-положительных срабатываний стало гораздо меньше. Однако, в этот же момент начала расползаться эпидемия ботнетов. И самым популярным способом стало помещение зловредных приложений на популярных сайтах, и, если какой-нибудь браузерный плагин вроде Java или Adobe Flash был с уязвимостью, при клике на соответствующий документ вредонос тихонько скачивался на компьютер. Кроме того, в 2008 году злоумышленники активно использовали перенаправляющие ссылки на вредоносные сайты, так что IDS/IPS вендоры начали также добавлять списки IP-адресов вредоносных командных центров и их веб-адресов – если эти ресурсы содержали на себе вредоносы.
2011 – 2015: Системы предотвращения вторжений следующего поколения
В эти годы был переломный момент для вендоров в сфере ИБ – так как они стали выпускать системы предотвращения угроз следующего поколеня, которые включали в себя такие фичи как контроль пользователей и приложений. Таким образом, традиционный IPS смотрит в сетевой трафик на предмет известных аттак и что-то делает с этим трафиком, в зависимости от модели развертывания, а IPS следующего поколения делает тоже самое, но кроме того он покрывает гораздо больше протоколов (вплоть до 7 уровня) для защиты от большего количества атак. Кроме того, он также позволяет гибко контролировать доступ к приложениям – то есть, например, чтобы можно было лайкать фотки в VK, но нельзя было их заливать. И более того – чтобы это могли делать только определенные группы пользователей.
Следующее дополнение к IDS/IPS системам появилось после взлома RSA (компании, которая занимается мультифакторной аутентификацией) в 2011 году – тогда новостные ресурсы назвали это APT (Advanced Persistent Threat)-атакой, то есть сложной постоянной угрозой. Позже было сказано, что это была фишинговая атака, в которой содержался документ с вредоносом внутри. Клиенты стали спрашивать ИБ вендоров, могут ли они их защитить от подобных вещей, если у вендора нет сигнатуры на данный конкретный вредонос, и ответом вендоров было предоставление такой фичи как эмуляция и песочницы – но это потребовало около 18 месяцев для большинства вендоров. Так что компании FireEye и Fidelis оказались в фазе бурного роста, так как они предоставляли такие технологии песочницы, до которых всем было очень далеко. Только подумайте, песочницы впервые за всю историю могли обнаружить до сих пор неизвестную атаку нулевого дня.
Как работает песочница: неизвестный исполняемый файл или документ сначала попадает в песочницу, где он запускается в разных операционных системах и алгоритм пытается имитировать действия пользователя – клавиши стучат, мышка елозит и кликает, время прокручивается – все в надежде на то, что вредонос вылупится и себя покажет.
Вендоры пошли чуть дальше. Если вредонос себя проявлял, то его хэш-сумма (MD5 или SHA) сохранялась для того, чтобы в будущем всегда ловить такие файлы. Соответственно, если другой клиент на такой же системе получал тот же файл – то он не пропускался в сеть и звучала тревога. Такие системы получили название Next Generation Firewall – межсетевых экранов следующего поколения.
Конечно, Гартнер использовал этот термин еще в 2003 году и предсказал, что они межсетевые экраны будут содержать внутри себя сложную IPS систему, но индустрия не принимала подобные устройства вплоть до 2013 года.
2018 – и далее: Межсетевые экраны следующего поколения
Сегодня большинство организаций используют NGFW и список их фич только растет. Так как эти МСЭ отличаются различными фичами, организациям придется выбирать в зависимости от точности поставленной задачи и их требований.
Опять же, есть за и против МСЭ следующего поколения: за – нужно купить только пару железяк вместо почти десятка. Против – это все один вендор, и его мудрость ограничена, то есть не существует лучшего вендора, который знал бы все и сразу. Таким образом очень неплохой практикой является комбинировать устройства защиты от разных производителей и разбавлять их «мудрость» между собой. Важно помнить, что любое устройство защиты всегда хорошо только настолько, насколько богаты знания и опыт, стоящие за этим устройством. Есть даже специальный термин – Threat Intelligence. Такие системы и базы знаний есть у всех больших ИБ вендоров. Более того, они есть полностью бесплатные и открытые – например, VirusTotal.
Сегодня ландшафт угроз постоянно меняется и большинство вендоров сконцентрировано на машинном обучении, чтобы алгоритмы анализа файлов всегда улучшались, а количество шума и ложных срабатываний стремилось к минимуму.
Но это бесконечная игра в кошки-мышки, и на каждый ход производителей хакеры придумают что-нибудь новое, что позже смогут нейтрализовать вендоры.
SSH туннели один из самых часто используемых методов связи среди системных и сетевых администраторов. В данном руководстве расскажем о такой функции как переброс порта SSH. Это используется для безопасной передачи данных между двумя и более системами.
Что такое переброс порта SSH?
Коротко, переброс порта SSH даёт возможность создавать туннель между несколькими системами, а затем настроить эти системы так, чтобы трафик они гнали через этот туннель. Именно по такой логике работает VPN или SOCKS Proxy.
Есть несколько разных методов переброса: переброс локального порта, переброс удалённого порта или динамический переброс. Для начала дадим пояснение каждому из них.
Локальный переброс порта позволяет получать доступ ко внешним ресурсам из локальной сети и работать в удаленной системе, как если бы они находились в одной локальной сети. По такому принципу работает Remote Access VPN.
Переброс удаленного порта дает возможность удалённой системе получать доступ к вашей локальной сети.
Динамический переброс создает SOCKS прокси сервер. После этого настраиваем приложения так, чтобы они использовали это туннель для передачи данных. Чаще всего такой переброс используется для доступа к ресурсам, который по той или иной причине заблокированы для данной страны.
Для чего нужен переброс порта SSH?
Допустим у вас есть какое-то приложение, которые передаёт данные в открытом виде или через нешифрованный протокол. Ввиду того, что SSH создает шифрованное соединение, то вы с легкостью можете настроить программу так, чтобы трафик её шёл через этот туннель.
Он так же часто используется для доступа к внутренним ресурсам извне. Приблизительно это напоминает Site-to-Site VPN, где нужно указывать какой именно трафик нужно заворачивать в туннель.
Сколько сессий можно устанавливать?
Теоретически, можно создавать столько сессий, сколько нам захочется. В сети используется 65 535 различных портов, и мы можем перебрасывать любой из этих портов.
Но при перебросе порта нужно учитывать, что некоторые из них зарезервированы за конкретными сервисами. Например, HTTP использует 80 порт. Значит, переброс на порт 80 возможен только если нужно переадресовать веб трафик.
Порт, который перебрасывается на локальном хосте может не совпадать с портом удаленной системы. Мы легко можем перебросить локальный порт 8080 на порт 80 на удаленной машине. Иными словами, если мы напишем IP адрес нашей машины и порт 8080, то запрос пойдет на 80 порт удалённой системы.
Если вам не критично какой порт использовать на своем хосте, лучше выбрать что-то из диапазона 2000-10000, так как все порты ниже 2000 зарезервированы.
Переброс локального порта
Локальная пересылка представляет собой переброс порта из клиентской системы на сервер. Он позволяет настроить порт в системе таким образом, чтобы все соединения на этот порт проходили через туннель SSH.
Для переадресации локального порта используется ключ L. Общий синтаксис команды таков:
$ ssh -L local_port:remote_ip:remote_port user@hostname.com
$ ssh -L 8080:www.example1.com:80 example2.com
Данной командой мы говорим системе, что все запросы на 8080 порт example1.com переадресовывать на example2.com. Это часто используется когда нужно организовать доступ извне на внутренний ресурсы компании.
Тестирование работы переадресованного порта
Чтобы проверить, работает ли переадресация должным образом можно воспользоваться утилитой netcat. На машине, где была запущена команда переадресации нужно ввести команду netcat в следующем виде:
$ nc -v remote_ip port_number
Если переадресация работает и трафик проходит, то утилита вернёт "Успех!". В противном случае выдаст ошибку об истечении времени ожидания.
Если что-то не работает, нужно убедиться, что подключение к удаленному порту по SSH работает корректно и запросы не блокируются межсетевым экраном.
Создание постоянного туннеля (Autossh)
Для создания туннеля, который будет активен постоянно используется так называемая утилита Autossh. Единственно требование это необходимость настройки между двумя системами аутентификацию по публичным ключам, чтобы не получать запросы на ввод пароля при каждом обрыве и восстановлении соединения.
По умолчанию, Autossh не установлен. Чтобы установить эту утилиту введем команду ниже.
$ sudo apt-get install autossh
Синтаксис утилиты autossh почти похож на синтаксис ssh:
$ autossh -L 80:example1.com:80 example2.com
Переброс удалённого порта
Переброс порта с удалённой машины используется в тех случаях, если нужно предоставить доступ на свой хост. Допусти у нас установлен веб сервер и нам нужно, чтобы друзья могли пользоваться им. Для этого нужно ввести команду показанную ниже:
$ ssh -R 8080:localhost:80 geek@likegeeks.com
А общий синтаксис команды выглядит так:
$ ssh -R remote_port:local_ip:local_port user@hostname.com
Динамическая переадресация портов
Динамическая переадресация портов позволит ssh функционировать как прокси-сервер. Вместо переброса трафика на специфический порт, здесь трафик будет идти через на диапазон портов.
Если вы когда-нибудь пользовались прокси сервером для посещения заблокированного сайта или просмотра контента, недоступного в вашем регионе, вероятнее всего вы пользовались SOCKS сервером.
Динамическая переадресация также обеспечивает некоторую приватность. Она затрудняет логирование и анализ трафика, так как трафик проходит через промежуточный сервер. Для настройки динамической переадресации используется следующая команда:
$ ssh -D local_port user@hostname.com
Таким образом, если нужно весь трафик идущий на порт 1234 направить на SSH сервер, нужно ввести команду:
$ ssh -D 1234 geek@likegeeks.com
После установления соединения, мы можем указать в приложениях, например, браузере, пропускать трафик через туннель.
Множественная переадресация
Иногда приходится перебрасывать несколько внутренних портов на несколько внешних. Допустим у нас на одном и том же сервере крутятся и веб сервер и oracale. В таком случае мы можем указать несколько условий переадресации ставя перед каждым из них ключ L для локальной переадресации и R для внешней.
$ ssh -L local_port_1:remote_ip:remote_port_1 -L local_port_2:remote_ip:remote_port2 user@hostname.com
$ ssh -L 8080:192.168.1.1:80 -L 4430:192.168.1.1:1521 user@hostname.com
$ ssh -R remote_port1:local_ip:local_port1 remote_port2:local_ip:local_port2 user@hostname.com
Просмотр списка туннелей
Чтобы просмотреть сколько SSH туннелей активны на данный момент можно прибегнуть к помощи команды lsof:
$ lsof -i | egrep '<ssh>'
Как видим, на нашей системе сейчас активно три подключения. Чтобы вместо имени хоста показать IP адрес к команде нужно добавить ключ n.
$ lsof -i -n | egrep '<ssh>'
Ограничение переадресации портов
По умолчанию, переброс портов SSH активен для всех. Но если нужно ограничить переадресацию портов в целях безопасности, то нужно отредактировать файл sshd_config.
$ sudo vi /etc/ssh/sshd_config
Здесь есть несколько опций, позволяющих ограничивать создание SSH туннелей.
PermitOpen позволяет прописать адреса, для которых можно включить переадресацию портов. Тут можно указать конкретный IP адреса или название хоста:
PermitOpen host:port
PermitOpen IPv4_addr:port
PermitOpen [IPv6_addr]:port
AllowTCPForwarding данная опция включает или отключает переадресацию портов для SSH. Так же можно указать какой тип переадресации допускается на этом хосте.
AllowTCPForwarding yes #default setting
AllowTCPForwarding no #prevent all SSH port forwarding
AllowTCPForwarding local #allow only local SSH port forwarding
AllowTCPForwarding remote #allow only remote SSH port forwarding
Для подробной информации можно вызвать руководство по файлу sshd_config:
$ man sshd_config
Уменьшение задержки
Проблема с переадресацией портов на SSH это возможность увеличения задержки. При работе с текстовой информацией э то не критично. Проблема даёт о себе знать если по сети идёт много трафика, а SSH сервер настрое как SOCKS сервер, то есть на нём настроена динамический переброс портов.
Это происходит по той причине, что SSH туннели по сути это TCP туннель поверх TCP. Это не очень эффективный метод передачи данных.
Для решения проблемы можно настроить VPN, но если по какой-то причине предпочитаете SSH туннели, то существует программа sshuttle, которая устраняет проблему. На Ubuntu или других дистрибутивах семейства Debian программу можно установить командой
$ sudo apt-get install sshuttle
Если же программы нет в репозиториях дистрибутива, то можно взять ее с GitHub:
$ git clone https://github.com/sshuttle/sshuttle.git
$ cd sshuttle
$ ./setup.py install
Настройка туннеля в sshuttle отличается от SSH. Чтобы завернуть весь трафик в туннель нужно ввести следующую команду:
$ sudo sshuttle -r user@remote_ip -x remote_ip 0/0 vv
Прервать соединение можно комбинацией клавиш Ctrl+C. Чтобы запустить sshuttle как демон, нужно добавить ключ D.
Чтобы убедиться что туннель поднят и в глобальной сети показывается другой IP, в терминале можно ввести команду:
$ curl ipinfo.io
Или же просто открыть любой другой сайт, который покажет белый IP и местоположение.
