По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие наши статьи:
img
Усаживайтесь на кушетку поудобнее. Зачем, в первую очередь, вы хотите сменить mac – адрес у вашего сервера на базе Linux? Может хотите блочить его на фаерволе, или попробовать совершить «магию» с лицензиями, которые привязаны к маку? В целом, дело ваше. Мы покажем способ, как это сделать. Давайте по шагам. Находим текущий mac – адрес сетевого интерфейса Сначала давайте посмотрим на текущий mac вашего сервера. Сделать это можно командой: ip link show Вывод сервера будет примерно таким. Он будет содержать параметры (mac - адреса всех ваших интерфейсов): 1: lo: mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 2: eno1: mtu 1500 qdisc fq_codel state DOWN mode DEFAULT group default qlen 1000 link/ether 45:c6:f6:a7:12:30 brd ff:ff:ff:ff:ff:ff 3: enp0s12e2: mtu 1500 qdisc noqueue state UP mode DORMANT group default qlen 1000 link/ether 33:23:f8:8b:d7:65 brd ff:ff:ff:ff:ff:ff Как мы видим, например, у интерфейса enp0s12e2 текущий mac – адрес это 33:23:f8:8b:d7:65 . Давайте поменяем его. Меняем MAC с помощью Macchanger. Установка Macchanger - это ну очень простая утилита, чтобы смотреть, менять и управлять MAC – адресами на ваших сетевых интерфейсах. Она доступна на почти всех Linux – подобных системах. Например, чтобы установить Macchanger на Fedora, CentOS или RHEL используйте команду:/p> sudo dnf install macchanger А если у вас Debian, Ubuntu, Linux Mint или даже Kali Linux, то установить ее можно вот так: sudo apt install macchanger Как использовать Macchanger Помните имя интерфейса, которое мы обсудили чуть раньше? Ага, мы про enp0s12e2 Например, чтобы присвоить этому интерфейсу рандомный mac, используйте команду: sudo macchanger -r enp0s12e2 После смены, проверьте, что мак – адрес поменялся командой: ip addr Он стал другим, не так ли? Теперь, чтобы присвоить конкретный (нужный вам) мак интерфейсу, примените команду: macchanger --mac=XX:XX:XX:XX:XX:XX Где, как не сложно догадаться, XX:XX:XX:XX:XX:XX - mac, который вам нужен. Кстати, если вы поняли, что сделали что-то не то, то вернуть mac – адрес устройства к его изначальному значению можно вот так: macchanger -p enp0s12e2 Меняем MAC с помощью iproute Делать это через macchanger, честно говоря, правильнее. Однако, если не получилось/не хотите, то можно поступить вот так. Первое, выключаем интерфейс: sudo ip link set dev enp0s12e2 down Далее, присваиваем новый mac выключенному интерфейсу: sudo ip link set dev enp0s12e2 address XX:XX:XX:XX:XX:XX Не забываем включить интерфейс обратно: sudo ip link set dev enp0s12e2 up Смотрим статус: ip link show enp0s12e2 Итоги В статье мы обсудили два способа смены адреса: через утилиту macchanger и встроенную команду ip. Мы рекомендуем использовать macchanger, как более надежный способ. Однако, решать вам.
img
Почитать лекцию №21 про беспроводную связь по 802.11 можно тут. В предыдущих лекциях мы рассмотрели два примера передачи данных вида point-to-point по физическим носителям. В этих лекциях будут рассмотрены четыре примера передачи данных вида end-to-end. На рисунке 1 показана Recursive Internet Architecture (RINA). Конечно, не каждый транспортный протокол точно сопоставляется с одним функциональным слоем в RINA, но сопоставление достаточно близко, чтобы быть полезным. Главное, что нужно запомнить-для каждого транспортного протокола есть четыре вопроса, которые вы можете задать: Как протокол обеспечивает передачу данных или как он упорядочивает данные? Как протокол предоставляет услуги мультиплексирования или возможность передавать несколько потоков данных на одном общем ресурсе? Как протокол обеспечивает контроль ошибок, который должен включать не только обнаружение ошибок, но и устранение ошибок - либо путем повторной передачи, либо путем предоставления информации, достаточной для восстановления исходной информации? Как протокол обеспечивает управление потоком? Каждый из этих вопросов может включать ряд дополнительных вопросов, таких как определение Maximum Transmission Unit (MTU), обеспечение репликации пакетов для многоадресной рассылки и т. д. В этих лекциях будут рассмотрены четыре протокола: Интернет-протокол (IP), который обеспечивает нижнюю половину второй пары слоев. Основное внимание при рассмотрении IP уделяется схеме адресации для мультиплексирования и способности обеспечивать единый способ передачи данных для множества различных физических транспортных систем. Протокол управления передачей (TCP), который обеспечивает одну версию верхней половины второй пары уровней. TCP обеспечивает управление ошибками и потоками, а также место для переноса информации о мультиплексировании для приложений и других протоколов, которые работают поверх TCP. Протокол Quick User Datagram Protocol Internet Connections (QUIC), который обеспечивает другую версию верхней половины второй пары уровней. QUIC очень похож на TCP по своим функциям, но имеет некоторые существенные отличия от TCP в том, как он работает. Протокол управляющих сообщений Интернета (ICMP). Internet Protocol (IP) Интернет-протокол (IP) был первоначально задокументирован в серии документов спецификации Интернет-протокола, называемых IEN, в середине 1970-х годов, в основном написанных Jonathan B. Postel. В этих документах описан протокол TCP, который при первоначальном развертывании включал в себя функции, содержащиеся в двух протоколах, IP и TCP. Postel отметил, что такое сочетание функциональности в едином протоколе не очень хорошо; Адресное пространство IPv4 представляет собой 32-битное целое число без знака, что означает, что оно может нумеровать или адресовать 232 устройства - около 4,2 миллиарда устройств. Звучит много, но на самом деле все иначе по нескольким причинам: Каждый адрес представляет один интерфейс, а не одно устройство. Фактически, IP-адреса часто используются для представления службы или виртуального хоста (или машины), что означает, что одно устройство часто будет использовать более одного IP-адреса. Большое количество адресов теряется в процессе агрегации. В начале 1990-х стало очевидно, что в Интернете скоро закончатся адреса в адресном пространстве IPv4; диаграммы, изображенные на рисунке 2, показывают изменение свободных и доступных IPv4 с течением времени, начиная с середины 1990-х годов. Простым решением этой ситуации было бы расширение адресного пространства IPv4 для охвата большего количества устройств, но опыт работы с протоколом IPv4 привел к тому, что группа Internet Engineering Task Force (IETF) взяла на себя более крупную задачу: перепроектировать IPv4. Работа по замене началась в 1990 году, а первые проекты получили статус стандарта в 1998 году. Адресное пространство IPv6 содержит 2128 адресов, или примерно 3,4 × 1038. IPv6 предназначен для предоставления услуг для нескольких различных протоколов, таких как TCP и QUIC. Таким образом, IPv6 предоставляет только две службы из четырех, необходимых для передачи данных по сети: транспорт, который включает маршалинг данных, и мультиплексирование. Транспорт и Маршалинг IP обеспечивает "базовый уровень", на котором работает широкий спектр протоколов более высокого уровня по множеству различных типов физических каналов. Для этого IP должен решить две проблемы: Запуск на множестве различных физических протоколов и протоколов нижнего уровня при одновременном представлении согласованного набора сервисов более высоким уровням. Адаптация к большому разнообразию размеров кадра, предоставляемых нижними уровнями Чтобы создать единый протокол, на котором могут работать все протоколы верхнего уровня, IP должен "вписываться" в тип кадра многих различных типов протоколов физического уровня. Ряд проектов описывает, как запустить IP поверх определенного физического уровня, включая сети MPEG-2, асинхронный режим передачи, оптические сети, протокол Point-to-Point (PPP), Vertical Blanking Interval (VBI) в телевидении, Fiber Distributed Data Interface (FDDI), и ряд других протоколов физического уровня. Эти проекты в значительной степени определяют, как переносить IP-дейтаграмму (или пакет) в кадре (или пакете) нижележащего физического уровня, и как включить межуровневое обнаружение, такое как протокол разрешения адресов (ARP), для работы с каждым типом носителя. IP также должен определять, как переносить большие блоки данных через различные MTU, доступные на разных типах физических каналов. В то время как исходная спецификация Ethernet выбирала MTU в 1500 октетов для баланса между большими размерами пакетов и максимальным использованием канала, многие другие физические уровни были разработаны с большими MTU. Кроме того, приложения не склонны отправлять информацию аккуратными блоками размером с MTU. IP решает эти две проблемы, обеспечивая фрагментацию. На рисунке 3 это показано. Если приложение (или протокол более высокого уровня) передает 2000 октетов данных для передачи в IP, реализация IP будет: Определите MTU вдоль пути, по которому должны передаваться данные; обычно это происходит путем считывания настроенного значения или значения по умолчанию, установленного системным программным обеспечением. Разбейте информацию на несколько фрагментов, основываясь на MTU минус прогнозируемый размер заголовков, включая заголовки туннелей и т. д.- метаданные, которые должны передаваться вместе с данными. Отправьте первый фрагмент с дополнительным заголовком IPv6 (что означает, что заголовок фрагмента не должен быть включен в пакеты, которые не являются фрагментами большего блока данных). Установите смещение в заголовке more fragments на первый октет исходного блока данных, который этот пакет представляет собой деление на 8; в Примере на рисунке 3 первый пакет имеет смещение 0, а второй-150 (1200/8). Установите бит more fragments равным 0, если это последний фрагмент блока данных, и 1, если за ним следует больше фрагментов. Этот размер общего блока данных, который IPv6 может переносить через фрагменты, ограничен размером поля смещения, которое составляет 13 бит. Следовательно, IPv6 может нести не более 214 октетов данных в виде последовательности фрагментов или блока данных размером около 65 536 октетов плюс один фрагмент размером с MTU. Все, что больше этого, должно быть каким-то образом разбито протоколом более высокого уровня перед передачей в IPv6 для транспортировки. Наконец, IP должен обеспечивать какой-то способ передачи пакетов по сети, использующей более одного типа физического уровня. Это решается путем перезаписи заголовков нижнего уровня на каждом этапе в сети, где могут быть взаимосвязаны несколько типов мультимедиа. Устройства, которые переписывают заголовки нижнего уровня таким образом, изначально назывались шлюзами, но теперь обычно называются маршрутизаторами, поскольку они направляют трафик на основе информации, содержащейся в заголовке IP. Есть и другие интересные аспекты того, как IPv6 передает данные. На рисунке 4 показан заголовок IPv6, с которым можно работать. На рисунке 4: Версия установлена на 6 для IPv6. traffic class разделен на два поля: 6 бит для передачи типа услуги (или класса услуги), 2 бита для передачи уведомления о перегрузке. flow label предназначена для указания устройствам пересылки, как хранить пакеты в одном потоке на одном и том же пути в наборе путей с многолучевым распространением с равной стоимостью (ECMP). payload length указывает количество данных, переносимых в пакете, в октетах. next header предоставляет информацию о любых дополнительных заголовках, содержащихся в пакете. Заголовок IPv6 может содержать информацию, выходящую за рамки того, что содержится в основном заголовке. hop limit - это количество раз, когда этот пакет может быть "обработан" сетевым устройством, прежде чем он будет отброшен. Любой маршрутизатор (или другое устройство), перезаписывающий заголовки нижнего уровня, должен уменьшить это число на единицу в процессе пересылки; когда предел перехода достигает 0 или 1, пакет следует отбросить. Важно! Счетчик скачков используется для предотвращения постоянного зацикливания пакета в сети. Каждый раз, когда пакет пересылается сетевым устройством, счетчик переходов уменьшается на единицу. Если счетчик переходов достигает 0, пакет отбрасывается. Если пакет зацикливается в сети, счетчик переходов (также называемый временем жизни или TTL) в конечном итоге будет уменьшен до 0, и пакет будет отброшен. Заголовок IPv6 представляет собой смесь переменной (Type Length Value [TLV]) и информации фиксированной длины. Основной заголовок состоит из полей фиксированной длины, но следующее поле заголовка оставляет открытой возможность дополнительных (или расширенных) заголовков, некоторые из которых форматируются как TLV. Это позволяет создавать пользовательские аппаратные средства (например, прикладную интегральную схему [ASIC]) для быстрого переключения пакетов на основе полей фиксированной длины, оставляя открытой возможность переноса данных переменной длины, которые могут быть обработаны только в программном обеспечении. Мультиплексирование IPv6 позволяет мультиплексировать двумя способами: Предоставляя большое адресное пространство для использования при идентификации хостов и сетей (или, в более широком смысле, достижимых пунктов назначения). Предоставляя пространство, в которое протокол верхнего уровня может поместить номер протокола, что позволяет нескольким протоколам работать поверх IPv6. Адресация IPv6 Адрес IPv6 имеет 128 битов, что означает, что может быть до 2128 адресов - огромное количество адресов, которых, возможно, хватит, чтобы сосчитать каждую крупицу пыли на Земле. Адрес IPv6 обычно записывается как последовательность шестнадцатеричных чисел, а не как последовательность из 128 нулей и единиц, как показано на рисунке 5. В формате IPv6 адреса стоит отметить двоеточие: Начальные нули в каждом разделе (выделены двоеточием) опускаются. Одну длинную строку нулей можно заменить двойным двоеточием в адресе только один раз. Почему так много адресов? Потому что многие адреса никогда не используются ни в одной схеме адресации. Во-первых, многие адреса никогда не используются, потому что адреса агрегируются. Агрегация - это использование одного префикса (или сети, или достижимого пункта назначения) для представления большего числа достижимых пунктов назначения. Рисунок 6 иллюстрирует это. На рисунке 6: Хостам A и B даны 101 :: 1 и 101 :: 2 в качестве их адресов IPv6. Однако эти два хоста подключены к одному широковещательному сегменту (например, Ethernet) и, следовательно, используют один и тот же интерфейс в C. Даже если C имеет адрес в этой общей сети, он фактически объявляет саму сеть - некоторые инженеры считают это полезно думать о самом проводе как о достижимом пункте назначения: 101 :: / 64. E получает два достижимых назначения, 101::/64 от C и 102::/64 от D. Уменьшая длину префикса, он может анонсировать одно достижимое назначение, которое включает в себя оба этих более длинных префиксных достижимых назначения. E рекламирует 100:: / 60. G, в свою очередь, получает 100 :: / 60 от E и 110: / 60 от F. Опять же, это же адресное пространство может быть описано с помощью единственного достижимого пункта назначения, 100 :: / 56, так что это то, что G объявляет. Как эта агрегация работает в реальном адресном пространстве? Рисунок 7 объясняет это. Длина префикса, которая представляет собой число после косой черты в reachable destination, сообщает вам количество битов, которые учитываются при определении того, что является частью префикса (и, следовательно, также, что нет). Длина префикса отсчитывается слева направо. Любой набор адресов с одинаковыми значениями чисел в пределах длины префикса считается частью одного и того же reachable destination. В полном адресном пространстве IPv6 128 бит, поэтому / 128 представляет один хост. В адресе с 64-битной длиной префикса (/ 64) только четыре левых раздела IPv6-адреса являются частью префикса или reachable destination; остальные четыре правые части IPv6-адреса считаются адресами хоста или подсети, которые "содержатся" в префиксе. В адресе с длиной префикса 60 бит (/ 60) четыре левых раздела IPv6-адреса минус одна шестнадцатеричная цифра считаются частью reachable destination или префикса. В адресе с длиной префикса 56 бит (/ 56) четыре левых раздела IPv6-адреса минус две шестнадцатеричные цифры считаются частью reachable destination или префикса. Пока вы всегда изменяете длину префикса с шагом 4 (/ 4, / 8, / 12, / 16 и т. Д.), значащие цифры или цифры, которые являются частью префикса, всегда будут перемещать единицу в вправо (при увеличении длины префикса) или влево (при уменьшении длины префикса). Агрегация иногда кажется сложной, но это важная часть IP. Некоторая часть адресного пространства используется при автоконфигурации. Важно учитывать взаимодействие между автоконфигурацией и назначением адреса IPv6. Как правило, необходимо выделить некоторый объем адресного пространства, чтобы гарантировать, что никакие два устройства, подключенные к сети, не будут иметь одинаковый идентификатор. В случае IPv6 половина адресных пространств (все, что больше / 64) в определенных диапазонах адресов выделяется для формирования уникальных идентификаторов для каждого устройства. В-третьих, некоторые адреса зарезервированы для специального использования. Например, в IPv6 следующие адресные пространства предназначены для специального использования: ::ffff / 96 зарезервирован для IPv4-адресов, которые "сопоставляются" с адресным пространством IPv6. fc00 :: / 7 зарезервирован для уникальных локальных адресов (ULA); пакеты с этими адресами не предназначены для маршрутизации в глобальном Интернете, а скорее хранятся в сети одной организации. fe80::/10 выделен для локальных адресов связи; эти адреса автоматически назначаются на каждом интерфейсе и используются только для связи по одному физическому или виртуальному каналу связи. :: / 0 устанавливается в качестве маршрута по умолчанию; если сетевое устройство не знает никакого другого способа добраться до определенного пункта назначения, оно будет перенаправлять трафик по маршруту по умолчанию. В-четвертых, устройствам может быть присвоено несколько адресов. Многие сетевые администраторы склонны думать об адресе так, как если бы он описывал один узел или систему. На самом деле, один адрес может быть использован для описания многих вещей, в том числе: Один хост или система Единый интерфейс на хосте или в системе; хост с несколькими интерфейсами будет иметь несколько адресов Набор доступных сервисов на хосте или системе; например, виртуальной машине или конкретной службе, работающей на хосте, может быть назначен адрес, отличный от любого из адресов, назначенных интерфейсам хоста. Не существует необходимой прямой корреляции между адресом и физическим устройством или между адресом и физическим интерфейсом. Мультиплексирование между процессами Второй механизм мультиплексирования позволяет нескольким протоколам работать на одном и том же базовом уровне. Эта форма мультиплексирования обеспечивается через номера протоколов. Рисунок 8 демонстрирует это. next header заголовка либо указывает на: next header в пакете IPv6, если есть next header Номер протокола, если next header является транспортным протоколом (например, TCP). Эти дополнительные заголовки называются дополнительными или расширенными заголовками; некоторые из них имеют фиксированную длину, а другие основаны на TLV; например: Параметрах Hop-by-hop: набор TLV, описывающих действия, которые должно предпринять каждое устройство пересылки. Маршрутизации: набор типов маршрутов фиксированной длины, используемых для указания пути, по которому пакет должен пройти через сеть. Фрагмент: набор полей фиксированной длины, содержащий информацию о фрагменте пакета. Заголовок аутентификации: набор TLV, содержащих информацию аутентификации и / или шифрования. Jumbogram: необязательное поле длины данных, позволяющее пакету IPv6 нести на один байт менее 4 ГБ данных. next header имеет длину 8 бит, что означает, что оно может содержать число от 0 до 255. Каждое число в этом диапазоне присваивается либо определенному типу заголовка опции, либо конкретному протоколу более высокого уровня. Например: 0: next header -это опция IPv6 hop-by-hop. 1: Полезная нагрузка пакета - это протокол Internet Control Message Protocol (ICMP). 6: Полезная нагрузка пакета-TCP. 17: Полезная нагрузка пакета - это UDP. 41: Полезная нагрузка пакета-IPv6. 43: next header - это routing header IPv6 44: next header -это fragment header IPv6 50: next header -это Encapsulated Security Header (ESH). Номер протокола используется принимающим хостом для отправки содержимого пакета правильному локальному процессу для обработки; обычно это означает удаление заголовков нижнего (физического) уровня из пакета, помещение пакета во входную очередь для правильного процесса (например, TCP), а затем уведомление операционной системы о том, что соответствующий процесс должен быть запущен.
img
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().
ВЕСЕННИЕ СКИДКИ
40%
50%
60%
До конца акции: 30 дней 24 : 59 : 59