Азы работы в командной строке Linux (часть 4)


Предыдущие части:

В этой части мы продолжим знакомиться с новыми командами Linux. Мы изучим несколько сетевых команд, а также команд для работы с аппаратными сетевыми составляющими (сетевые карты, беспроводные сетевые карты). Кроме Linux, одноимённые команды могут быть доступны в Windows и даже в некоторых продвинутых роутерах.

ping — Проверка доступен ли удалённый хост. Проверка работоспособности сети

Про команду ping знают наверное почти все — такая же команда есть и в Windows.

Слово «хост» применяется довольно часто, когда говорят про сеть. Хостом может быть компьютер, а также любое другое устройство, подключённое к сети, например, роутер, сервер, мобильный телефон, телевизор с возможностью выхода в Интернет.

С помощью команды ping можно узнать:

  • находится ли удалённый хост онлайн (работает ли)
  • какое качество связи до удалённого хоста (задержка, потери данных)

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

Пример запуска команды:

ping -c 4 ya.ru

Здесь в качестве хоста указан ya.ru — можно указать любой другой сайт или IP адрес. Выбран ya.ru (это сайт Яндекса) как один из самых стабильно доступных в РФ. Также обратите внимание на опцию и её значение -c 4. Если запустить без этой опции, то команда ping будет работать пока её не остановить вручную.

Кстати, в Windows команда запускается без этого ключа:

ping ya.ru

но отсылает пинги только четыре раза, затем останавливается — видимо, авторы программы не доверяют пользователям Windows ))))

Рассмотрим результат работы программы:

ping: ya.ru: Временный сбой в разрешении имен

Эта ошибка может говорить об одной из двух проблем:

  • или вы вообще не подключены ни к одной из сетей
  • или недоступен выбранный DNS сервер (это который преобразовывает имена сайтов в IP адреса)

Чтобы определиться в причинах проблемы, пропингуйте IP адрес, который не нуждается в DNS сервере.

ping 8.8.8.8

Если будет выведено сообщение

connect: Сеть недоступна

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

Если же пинги пошли, значит проблема в DNS сервере.

Если вы получаете в конечной статистике «0% packet loss» — это хорошо, значит данные не теряются при пересылке. Если вы получаете «100% packet loss», то значит данные вообще не доходят до удалённого хоста ИЛИ этот хост офлайн (выберите другой хост).

Чем меньше значение отклика (в миллисекундах), тем лучше.

Ошибка «Destination Net Unreachable» говорит о том, что компьютер просто не знает, как добраться до указанной сети.


cURL — Получение страницы сайта

cURL это очень мощный комбайн по работе с веб-приложениями. В простейшем случае использования cURL просто получает содержимое веб-страницы.

Например:

curl https://hackware.ru

Покажу пару практических случаев применения, например, если совместить с командой md5sum:

curl -s https://hackware.ru | md5sum

То будет получена примерно такая строка «3bcab731390e056aecaed914a1a68f38». Команда curl скачивает исходный код HTML страницы и передаёт его программе md5sum которая вычисляет контрольную сумму строки. В данном случае в качестве строки выступает исходный код страницы. Если страница не поменялась = исходный код не изменён = контрольная сумма прежняя. С помощью этого можно контролировать, когда на интересующем сайте вводятся изменения. Можно написать скрипт, который будет, к примеру, проверять один или множество сайтов на предмет дефейса (взлома и изменения внешнего вида).

Чуть более сложный пример с grep и sed, который показывает последние 10 статей сайта HackWare.ru:

curl -s https://hackware.ru/ | grep -E -o '<h3 class=ftitle>.*</h3>' | sed 's/<h3 class=ftitle>//' | sed 's/<\/h3>//'

Ещё curl можно использовать для определения, куда ведёт редирект. Редирект — это перенаправление на другой адрес.

Допустим кто-то (например, я) дал вам короткую ссылку https://hackware.ru?goto=1, а вы хотите узнать, куда на самом деле она ведёт.

Для этого мы запускаем curl с опцией -I (эта опция говорит программе показывать только HTTP заголовки):

curl -I https://hackware.ru?goto=1

HTTP заголовки — это служебная информация, которой постоянно обмениваются веб-браузер и веб-сервер. Обычно мы её не видим. Даже программа curl показывает исходный HTML код, но по умолчанию не показывает HTTP заголовки. Опцией -I мы говорим не показывать содержимое страницы, а показать только заголовки. Дело в том, что информация о редиректе содержится именно в заголовке.

Получаем:

Обратите внимание на строку с location:

location: http://www.hostland.ru/?r=b33e0e2f

Дело о реферальной ссылке раскрыто!

После слова location идёт адрес, куда выполняется редирект. На самом деле, одна ссылка, может быть завёрнута в другую, потом в третью и так далее. В этом случае просто вставляйте новый полученный адрес в команду с curl -I. Например:

curl -I http://www.hostland.ru/?r=b33e0e2f


Как видим, вновь происходит переадресация, об этом говорят строка с Location:

Location: https://www.hostland.ru/?r=b33e0e2f

И код ответа (301 — Навсегда перемещена):

HTTP/1.1 301 Moved Permanently

Происходит перенаправление с HTTP адреса на HTTPS адрес.

Можно заглянуть, а что происходит дальше, после того, как вы попадёте на страницу https://www.hostland.ru/?r=b33e0e2f? Пожалуйста:

curl -I https://www.hostland.ru/?r=b33e0e2f

И опять редирект! В этот раз на адрес /, что означает корневую папку сервера.


Ещё из интересного там строки с set-cookie — то есть нам устанавливают кукиз.

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

Имеется сайт online-vk.ru, который «спрятан» за CloudFlare. Соответственно в качестве IP адреса сайта нам показываются 104.24.119.169 и 104.24.118.169, которые принадлежат CloudFlare и не являются настоящими IP адресами сайта. С помощью других техник исследования установлено, что возможным IP адресом сайта может быть 193.124.45.137. Как это подтвердить или опровергнуть?

С помощью curl мы отправляем запрос к IP адресу 193.124.45.137, и в заголовке «Host» указываем имя интересующего нас хоста:

curl 193.124.45.137 -H "Host: online-vk.ru"

Поскольку получена страница сайта online-vk.ru (а не сообщение об ошибке или какая-то страница дефолтного хоста 193.124.45.137, значит нахождение online-vk.ru на IP адресе 193.124.45.137 доказано.

Можно попробовать сделать запрос без указания имени хоста:

curl 193.124.45.137

Будет показана совсем другая страница (от дефолтного хоста 1.apple-info.com).

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

wget — Скачивание файлов в командной строке

Как и cURL, wget это мощный комбайн с большим количеством опций и возможностей. В простейшем своём применении с помощью wget можно скачивать файлы:


wget https://hackware.ru/wp-content/uploads/2016/12/03-5.jpg

Будет скачен и сохранён в текущую папку указанный файл.

Во второй части цикла «Азов командной строки» я рассказывал, что настоящая сила командной строки заключается в совместном использовании команд.

Вот пример команды, которая состоит из команд curl, wget, grep и head — все эти команды нам уже знакомы по остальным частям «Азов командной строки Linux». Эта конструкция из команд сама определяет номер последней версии jSQL Injection и скачивает нужный файл:

wget https://github.com/`curl -s https://github.com/ron190/jsql-injection/releases | grep -E -o '/ron190/jsql-injection/releases/download/v[0-9]{1,2}.[0-9]{1,2}/jsql-injection-v[0-9]{1,2}.[0-9]{1,2}.jar' | head -n 1`

ip — Просмотр свойств и настройка сетевых интерфейсов

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

Программа ip может показывать информацию о сетевых интерфейсах и менять их настройки.

К примеру, запуск программы с внутренней командой a выведет список всех сетевых интерфейсов в системе и покажет их свойства:

ip a

В строке link/ether можно узнать MAC адреса ваших сетевых карт.

А в строке, которая начинается с inet можно увидеть текущий IP адрес и после слэша (/) маску подсети.

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

ip -s -h a

Команда route покажет вам маршруты, настроенные на вашем компьютере:

ip route

iw — Работа с беспроводными сетевыми интерфейсами

Программа iw показывает информацию и позволяет настроить беспроводные интерфейсы.

Чтобы показать все Wi-Fi адаптеры и их свойства, в том числе имена интерфейсов, выполните:

iw dev

Как можно увидеть, у меня интерфейсы называются wlp0s20f0u1 и wlo1

Прямо в командной строке вы можете посмотреть, какие Wi-Fi сети доступны рядом с вами и их характеристики, для этого выполните следующую команду, в которой замените ИМЯ_ИНТЕРФЕЙСА на действительное имя беспроводного интерфейса в вашей системе:

sudo iw dev ИМЯ_ИНТЕРФЕЙСА scan

Например моего случая (имя интерфейса wlp0s20f0u1):

sudo iw dev wlp0s20f0u1 scan

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

sudo iw dev ИМЯ_ИНТЕРФЕЙСА scan | grep SSID

Поскольку это первое использование команды sudo в данной серии Азов командной строки, то рекомендуется ознакомиться со статьёй «Что такое sudo», поскольку команда sudo имеет важное значение и используется очень часто в Linux.

traceroute — Определение маршрута до удалённого хоста

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

Например, я хочу узнать, какой путь проходит пакет от моего компьютера до сайта ya.ru:

traceroute ya.ru

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

Для дополнительного развития смотрите статьи:

dig — Определение IP адреса хоста. Определение используемого DNS сервера

С помощью команды dig вы можете узнать, какой IP адрес у сайта. Пример:

dig ya.ru

Также в строке начинающейся с ;; SERVER будет показан DNS сервер, к которому делаются запросы.

;; SERVER: 8.8.8.8#53(8.8.8.8)

С помощью можно сделать запрос к определённому DNS серверу, указав его после символа @, например:

dig ya.ru @8.8.4.4

Ещё одна программа с похожей функцией — nslookup, она имеется не только на Linux, но и на Windows.

Продолжение: «Азы работы в командной строке Linux (часть 5)».


Рекомендуется Вам:

One Comment to Азы работы в командной строке Linux (часть 4)

  1. zoban:

    супер хоть и знаю как работать с терминалом но мне некоторые фишечки попались впервые

Добавить комментарий для zoban Отменить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *