Источник www.kalitutorials.net
В этом руководстве мы рассмотрим некоторые из основ сетевых технологий. Мы не будем ничего взламывать, но прочитав эту статью, вы узнаете множество вещей, которые пригодятся впоследствии, особенно когда вы будете использовать nmap. Также советуем вам просмотреть страницы всех перечисленных в данной публикации понятий в Википедии, поскольку вдаваться в подробности мы не будем.
IP-адрес
Как узнать внешний IP адрес из командной строки мы узнали с вами из этой темы. IP-адрес — это просто 32-битный адрес, который должно иметь любое устройство в любой сети (использующей протокол IP/TCP). Обычно он выражается в десятичной, а не двоичной системе счисления, потому что так его проще писать. Например:
Десятичное выражение - 192.168.1.1 Двоичное - 11000000.10101000.00000001.00000001
Из двоичной формы ясно, что IP действительно является 32-битным числом. Он может находиться в диапазоне от 0.0.0.0 до 255.255.255.255 (в двоичной форме от всех нулей ко всем единицам). [Первый октет чаще всего не превышает 127. Но здесь мы об этом рассказывать не будем.]
Части IP-адреса
IP-адрес состоит из 2 частей: номера сети и номера узла (хоста). Большинство беспроводных маршрутизаторов используют первые 3 октета (8 бит, потому и октет) для номера сети, а последний октет для номера хоста. Самая распространённая конфигурация — 192.168.1.1. Где 192.168.1.0 — номер сети, а 0.0.0.1 — номер хоста. Таким образом, номер хоста может варьироваться от 0.0.0.0 до 0.0.0.255 (хотя 0 и 255 обычно зарезервированы для сети и широкого вещания соответственно).
Потребность в сетевых масках
Но у разных сетей имеются различные потребности. Конфигурация, описанная выше, позволяет создать множество сетей (первые 3 октета являются номером сети и могут принимать различные значения, а не только 192.168.1.0), но в каждой их них могут находиться только 256 (на самом деле 254) хостов. Некоторым сетям может потребоваться больше (больше чем 255 хостов на одну сеть). Именно поэтому в сетях нет «жёстких» стандартов для номера хоста и номера сети. Вместо этого они могут указывать свои собственные конфигурации. Использование первых 3 октетов для номера сети, а последнего октета для номера хоста встречается довольно часто, но делать так ни в коем случае не обязательно. Благодаря сетевым маскам мы получаем гибкий набор конфигураций, подходящих для любых случаев.
Сетевая маска
Сетевая маска применяется для разделения IP-адреса в подсетях.
Начнём с простого примера. Допустим, мы хотим задать сетевую маску, которая работала бы так же, как беспроводной маршрутизатор в предыдущем примере. То есть первые 3 октета должны быть номером сети, а следующий — номером хоста.
Давайте подумаем, с помощью какой операции можно разделить части IP-адреса, отвечающие за сеть и хоста. Мы могли бы просто указать, после какого октета начинается номер хоста [фактически говоря, что всё после третьей точки (.) — номер хоста]. Хотя это простое решение, оно не слишком удобно. Вместо него был предложен более элегантный и математический подход.
Как работает сетевая маска
Сначала, поясню вам математический функционал сетевой маски. Предложим, что А — IP-адрес, а М — сетевая маска. Тогда,
A & M даёт номер сети A & (~M) даёт номер хоста.
Где,
& это побитовое И ~ это побитовое НЕ (то есть дополнение, 1-е дополнение, если быть точным)
Таким образом, сетевая маска — это, фактически, 32-битный двоичный номер (так же как и IP-адрес), целью которого является выдача номера хоста и номера сети после выполнения операции побитовое И с А.
Пример
Вы всё лучше поймёте, рассмотрев следующий пример:
A = 192.168.1.1 - ваш IP-адрес M = 255.255.255.0
Конвертируем их в двоичную систему счисления и выполняем нужные операции.
A = 11000000.10101000.00000001.00000001 (192.168.1.1) M = 11111111.11111111.11111111.00000000 (255.255.255.0) A&M = 11000000.10101000.00000001.00000000 (192.168.1.0)
A&M — IP сети, которая нам нужна
A = 11000000.10101000.00000001.00000001 (192.168.1.1) ~M = 00000000.00000000.00000000.11111111 (0.0.0.255) A&~M= 00000000.00000000.00000000.00000001 (0.0.0.1)
A&~M — IP хоста, который нам нужен
Пояснение
Фактически, если вы поймёте, что 11111111 — это 255 в десятичной системе, то увидите, что для частей IP-адресов, указывающих на сети, нужно устанавливать подсеть 255. А части, указывающие на хостов, должны равняться 0.
Если вы хотите зарезервировать 2 октета для сетей и 2 для хостов, тогда подсеть будет выглядеть так
M = 255.255.0.0
Если для хостов нужно 3 октета, тогда
M = 255.0.0.0
Следовательно, используя сетевые маски, мы можем добиться требуемого результата, то есть указания необходимого количества хостов. Рассмотрим этот вопрос чуть глубже.
Подсети
Предположим, вы хотите разделить свою сеть на части. Это суб-сети, известные как подсети.
Перейдём к практике. Пусть M — сетевая маска.
M = 11111111.11111111.11111111.11000000
Первые 3 октета описывают сеть. Но в 4-м октете, который предназначается для хоста, 2 самых важных бита (первые с левой стороны) являются единицами. Поэтому 2 важнейших бита 4-го октета будут видны после выполнения побитовой операции И. Они будут являться частью номера сети, однако, принадлежат к октету хоста. Таким образом, эти 2 бита, относящиеся к октету хоста, но отображающиеся в IP-адресе сети, разделяют сеть на подсети. Из 2 битов можно составить 4 возможные комбинации 00, 01, 10 и 11, поэтому в сети будет 4 подсети.
Пример подсети
Вернёмся к нашей «A»,
A = 11000000.10101000.00000001.xx000001 (192.168.1.1) M = 11111111.11111111.11111111.11000000 (255.255.255.192) A&M = 11000000.10101000.00000001.xx000000 (192.168.1.0)
Ранее, независимо от содержимого 4-го октета А, после выполнения операции A&M мы бы получили 4 октет, состоящий из одних только 0, то есть номер сети. На этот раз результатом будут 2 самых важных бита в номере сети. В зависимости от значения xx (может равняться 00, 01, 10 или 11) будет сформировано четыре подсети. Теперь давайте посмотрим, какой набор хостов относится к каждой из подсетей.
Какие хосты относятся к каждой их подсетей
11000000.10101000.00000001.00000000 включает хосты 192.168.1.0-63 (от 00000000 до 00111111) 11000000.10101000.00000001.01000000 включает хосты 192.168.1.64-127 (от 01000000 до 01111111) 11000000.10101000.00000001.10000000 включает хосты 192.168.1.128-191 (от 10000000 до 10111111) 11000000.10101000.00000001.11000000 включает хосты 192.168.1.192-255 (от 11000000 до 11111111)
Итак, сетевая маска М разделила сеть на 4 равные подсети, содержащие по 64 хоста. Существуют и более сложные подсети, применяющиеся в определённых областях. Я рекомендую вам ознакомиться со страницей Википедии, посвящённой маскам подсетей, чтобы получить об этом более полное представление. Здесь я уже объяснил достаточно, чтобы вы могли без проблем понять содержимое Википедии по данной теме.
Особые IP-адреса
0.0.0.0 = Все IP-адреса на локальной машине. Любой контент, размещённый на данном IP, будет доступен всем устройствам в сети.
127.0.0.1 = локальный хост. Обращение машины к самой себе.
255.255.255.255 = Широковещательный адрес. Данные, отправляемые на этот IP, будут переданы всем хостам в сети (похоже на работу радио).
В заключение
Видите обозначения на этой картинке ?
Такой способ представления подсетей с помощью /24, /25, /26 и так далее, очень полезен при сканировании сетей на уязвимости (с помощью nmap и других инструментов). /24 обозначает сетевую маску 255.255.255.0, как в нашем первом примере с беспроводным маршрутизатором. При выполнении сканирования nmap, вы будете сталкиваться с ней чаще всего. Следующая сеть, которую мы описали в разделе подсетей, отображается как /26. В ней 4 подсети. В свою очередь, /25 включает 2 подсети, /27 имеет 8, а /31 — уже 128 подсетей! При такой конфигурации, в каждой подсети может находиться только 2 хоста, и она используется для точечной связи. Надеюсь, в следующий раз, когда вам придётся иметь дело с сетями, у вас не возникнет никаких сложностей. Конечно, есть и другие вопросы, продолжающие данную тему, например, многоадресная рассылка. О них вы можете почитать самостоятельно, а это руководство подошло к концу. Удачи.
Спасибо за перевод статьи. В оригинале есть ошибки, которые перешли в этот перевод.
Первая ошибка.
Неправильно:
~M = 00000000.00000000.00000000.11111111 (0.255.255.255)
A&~M= 11000000.10101000.00000001.00000000 (0.0.0.1)
Правильно:
~M = 00000000.00000000.00000000.11111111 (0.0.0.255)
A&~M= 00000000.00000000.00000000.00000001 (0.0.0.1)
Вторая ошибка.
Неправильно:
M = 11111111.11111111.11111111.11000000 (255.255.255.0)
Правильно:
M = 11111111.11111111.11111111.11000000 (255.255.255.192)
Спасибо, исправлено.